我了解 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(使用前将#替换为@)