Javascript 对引用与值定义的变量的混淆

2024-01-11

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

var bar = 1;
var foo = bar;
bar = "something entirely different";
// foo is still 1

然而,当尝试将此逻辑应用于对象时,它的行为似乎有所不同:

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

有人可以告诉我发生了什么事以及为什么会有差异吗?


这是正确的。当您将变量分配给对象时,您实际上是在创建对该对象的第二个引用。在第一种情况下,您要做的是分配bar指向字符串foo指向,但是然后你change what bar指向您重新分配时bar.

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

可以这样想:bar = "something" is 改变什么bar指着,不改变实际对象{}到一个字符串。

本文 http://snook.ca/archives/javascript/javascript_pass是对您所看到的内容的相当好的解释。然而,我正在寻找更好/更权威的参考资料。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 对引用与值定义的变量的混淆 的相关文章

随机推荐