为什么引用函数的javascript变量即使在重载被引用函数后也保持不变?

为什么引用函数的javascript变量即使在重载被引用函数后也保持不变?,javascript,Javascript,我在理解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.callCou

我在理解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 () {}
为什么函数仍然引用原始的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变量(对象属性)成为另一个的别名。

您的问题不一致;是“功能”还是“我的乐趣”?“callCount”或“someProperty”?你是对的。我修正了密码。谢谢,谢谢你的回答。JavaScript中引用的概念对我来说有点模糊,可能是因为我的C++背景。