函数在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
。但这并没有改变。帮我想象一下这里的工作方式。
我找不到能解释js的书。
答案 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
对象。在构造函数下,您会找到自己创建的分数。
答案 2 :(得分:0)
是的,给定的内存表示形式对“作为对象的功能”非常有用。您在堆栈中有一个指针,它将指向堆中的实际函数对象。但是功能对象与普通对象略有不同。
请参见下面的代码
function sayHi() {
var score=12;
console.log("Hi! the score is " +score);
}
var score=12
是function 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
。