<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()
答案 0 :(得分:4)
在var jan = bob;
之后,jan
和bob
都是对同一功能的引用。
bob = function() {}
将新功能的引用分配给bob
jan
仍然包含对原始函数的引用。
即。您正在更改变量的值,而不是更改变量引用的函数。
比较:
var a = { f: function () { console.log(1); } };
var b = a;
a.f = function () { console.log(2); };
现在a
和b
包含对同一对象的引用。该对象包含对函数的引用。当您为该对象属性分配新函数时,a.f
和b.f
都会更改,因为a
和b
仍然是对同一对象的引用。
答案 1 :(得分: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)