Javascript对参考vs值定义的变量的混淆

Jef*_*eff 5 javascript variables pass-by-reference

我理解javascript语言的以下属性:

var bar = 1;
var foo = bar;
bar = "something entirely different";
// foo is still 1
Run Code Online (Sandbox Code Playgroud)

但是,当尝试将此逻辑应用于对象时,它似乎采取不同的行为:

var bar = {};
bar.prop = 1;
var foo = bar;
bar.prop = "something entirely different";
// foo.prop now changes to "something entirely different"
// but...
bar = "no longer an object";
// now foo remains an object with the prop property
Run Code Online (Sandbox Code Playgroud)

有人能告诉我发生了什么以及为什么会有区别?

Jos*_*osh 1

这是正确的。当您将变量分配给对象时,您实际上是在创建对该对象的第二个引用。在第一种情况下,您所做的是将bar指向字符串的foo指向分配给指向,但是当您重新分配时,您会更改指向的内容。barbar

在第二个示例中,您分配bar给一个新对象,然后指向foo同一对象,然后重新分配bar给一个字符串。foo仍然指向同一个对象。

可以这样想:bar = "something"正在更改bar指向 的内容,而不是将实际对象更改{}为字符串。

这篇文章很好地解释了您所看到的内容。然而,我正在寻找更好/更权威的参考资料。