0
<script>
//bob first initialization
var bob = function()
{
    console.log('bob');
};

//set jan to bob via reference
var jan = bob;

//set bob to another function
bob = function()
{
    console.log('newbob');
};

jan(); //console.logs 'bob'
bob(); //console.logs 'newbob'


</script>

问题:

为什么jan();输出bob,不是newbob吗?因为jan()是参考bob()

4

2 回答 2

4

之后var jan = bob;,两者janbob都是对同一函数的引用。

bob = function() {}分配对新函数的引用bob

jan仍然包含对原始函数的引用。

即您正在更改变量的值,而不是更改变量所引用的函数。


比较:

var a = { f: function () { console.log(1); } };
var b = a;
a.f = function () { console.log(2); };

现在ab包含对同一对象的引用。该对象包含对函数的引用。当您将新函数分配给该对象属性时,a.fandb.f都发生了变化,因为aandb仍然是对同一对象的引用。

于 2013-07-10T06:19:08.190 回答
0

jan 和 bob 只是在某个时间点碰巧指向同一个函数的两个变量,但是为其中一个分配新值不会对分配给另一个的值产生任何影响。就像是:

var a = 1;
var b = a; // a and b evaluate to 1
var a = 2; // a evaluates to 2, b evaluates to 1 (a's
           // assignment has no effect on b)
于 2013-07-10T06:33:27.680 回答