我在理解javascript的工作方式时遇到问题,并且找不到正确的解释,也许您可​​以帮我。

假设以下代码:

// aFunction references console.error
var aFunction = console.error;

// Assign a new property to aFunction
// As aFunction references console.error it will have the property too
aFunction.callCount = 0;

aFunction.hasOwnProperty("callCount");        //true
console.error.hasOwnProperty("callCount");    //true

// Overload console.error (why is not the purpose)
console.error = function() {}

console.dir(aFunction);     //VM807:2 function log() { [native code] }
console.dir(console.error); //VM808:2 function () {}


为什么aFunction仍然引用原始的console.error?

在此先感谢您的帮助。

最佳答案

当您将变量设置为对对象(在本例中为函数)的引用时,它将获得该引用值的副本。共享该参考值的其他变量或对象属性的后续更改将对您制作的副本没有任何影响。

应该清楚这里发生了什么,对吧?

var a = 2;
var b = a;
console.log(b); // 2
a = 3;
console.log(b); // still 2


对象引用的工作方式相同:

var a = { hello: "world" };
var b = a;
console.log(b.hello); // world
a = { hello: "goodbye" };
console.log(b.hello); // still world


变量a有一个新值,但这根本不影响b。赋值运算符=复制值。无法使一个JavaScript变量(对象属性)成为另一个的别名。

关于javascript - 为什么即使重载引用的函数后,引用函数的javascript变量仍保持不变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29948301/

10-12 12:47
查看更多