javascript如何通过引用工作传递?

时间:2014-04-25 12:54:05

标签: javascript

我对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中通过引用传递。

3 个答案:

答案 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)

您的函数只是设置本地指针,要更改引用的对象,您必须通过调用其属性和方法来完成此操作。