javascript中引用函数的问题

时间:2013-07-10 06:16:52

标签: javascript

<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()

的引用

2 个答案:

答案 0 :(得分: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.fb.f都会更改,因为ab仍然是对同一对象的引用。

答案 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)