我对Javascript相对较新,并且正在开发一个目前仅在js上编写的大项目。我读过的一个概念是
传入一个对象,通过引用传入它。
以下代码似乎违反了js在对象的情况下传递引用的规则。
var a = {b:2};
var modify = function(a) {a = {d:4}};
modify(a);
print a; //a is still {b:2}.
为什么上例中a的值没有改变?
注意:在http://snook.ca/archives/javascript/javascript_pass中提到对象在Javascript中通过引用传递。
答案 0 :(得分:7)
JavaScript中没有任何内容通过引用传递,通过尝试实现swap:
很容易看出这一点var a = 3;
var b = 5;
swap(a, b);
// Implement swap so that a is now 5 and b is now 3
// It is impossible.
答案 1 :(得分:7)
传入一个对象,通过引用传递它。
没有。 JavaScript总是pass-by-value。如果传递对象,则该值是对象的引用。如果它是按引用传递,您将获得对传递给函数的变量的引用。
您可以通过添加,删除或更改属性来改变对象本身,但更改参数的值并不会神奇地改变<的值< em>传递变量。
示例:
var a = {b:2};
var modify = function(a) {
delete a.b;
a.d = 4;
};
modify(a);
print a;
tl; dr:您可以永远通过为变量a
分配不同的值来更改变量b
的值。< / p>
答案 2 :(得分:0)
您的函数只是设置本地指针,要更改引用的对象,您必须通过调用其属性和方法来完成此操作。