JavaScript

时间:2019-07-17 05:39:19

标签: javascript function

函数在javascript中被视为对象。我仍然无法形象化和关联事物。到底发生了什么。根据我的理解,我已经编写了一些代码并绘制了一个内存表示形式。

<script type="text/javascript">
  function sayHi() {
    var score=12;
    console.log("Hi! the score is " +score);
  }
  sayHi();
  var sayHi2 = sayHi;
  sayHi2();
  var sayHi3=sayHi;
  sayHi3.score=24;
  sayHi();
</script>

我认为sayHi3.score=24会将score=12更改为score=24。但这并没有改变。帮我想象一下这里的工作方式。 enter image description here

我找不到能解释js的书。

3 个答案:

答案 0 :(得分:0)

在函数内部,您将分数声明为12。因此,每次该函数调用分数为12。

如果要将变量设置为其他值,可以执行以下操作:

<script type="text/javascript">
var score=12; // move out from the function
  function sayHi() {
    console.log("Hi! the score is " +score);
  }
  sayHi(); // score = 12
  var sayHi2 = sayHi;
  sayHi2(); // score is still 12
  var sayHi3=sayHi;
  score=24; // now score is 24
  sayHi3(); // print 24
</script>

不太了解您的目标是什么。希望有帮助。

答案 1 :(得分:0)

在调用sayHi函数时,您在声明var score = 12。对于要定义sayHi3.score = 24的函数3,它将存储在构造函数中。尝试检查sayHi.prototype对象。在构造函数下,您会找到自己创建的分数。

enter image description here

答案 2 :(得分:0)

是的,给定的内存表示形式对“作为对象的功能”非常有用。您在堆栈中有一个指针,它将指向堆中的实际函数对象。但是功能对象与普通对象略有不同。

请参见下面的代码

function sayHi() {
    var score=12;
    console.log("Hi! the score is " +score);
}

var score=12function sayHi()的局部变量。像我这样的初学者可能会将其与财产混淆。首先,局部变量和属性是两个不同的事物。由于将函数视为对象,因此可以向函数对象添加属性。

下面的代码向函数对象添加了一个新属性

function sayHi() {
    var score=12;
    console.log("Hi! the score is " +score);
}
sayHi.newProp='hello'; // Adding property to the function object

因此,这里var score=12是局部变量,而newProp='hello'是属性。 确认属性是否已成功添加。让我们运行下面的代码。我将创建一个新的指针,该指针将指向sayHi所指向的同一函数对象。

function sayHi() {
    var score=12;
    console.log("Hi! the score is " +score);
}
sayHi.newProp='hello';

/*Create a new pointer pointing to the same object*/
var obj=sayHi;
console.log(obj.newProp);

输出

  

嗨!分数是12

     

你好

obj.newProp打印hello,因为sayHi.newProp='hello';能够向功能对象添加新属性,即newProp

We can roughly represent this as follows: