Javascript中的动态变量(通过引用调用)

时间:2013-09-13 07:40:20

标签: javascript dynamic-variables pass-by-reference

当变量引用对象时,该值是对象的引用(参考:Javascript by reference vs. by value

function fun1(obj) {
obj.first = 1; //it affects the object ->obj
}
var myObj1 = {first: 0};
fun1(myObj1); //sending the object to the function
console.log(myObj1.first); // 1

但我想从对象中更改变量,例如

function fun2(obj) {
obj = 1;      }
var myObj2 = {first: 0};
fun2(myObj2.first);
console.log(myObj2.first);

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

  

有没有办法实现这个目标?

不直接。您可以做的就是传递一个对象并让函数在其上修改属性,如第一个示例所示。 JavaScript没有pass-by-reference,只是pass-by-value。 (当然,值可能是一个对象引用,但它仍然是一个值。)在JavaScript中没有办法直接修改你传入函数的变量/属性,因为函数是什么receive是该变量/ property的值的副本,而不是对该变量/ property的引用。


只是要清楚一点:在你的第一个代码块中,你说你是“将对象发送到函数”。那是不对的。您将引用发送给该函数的对象。

这是要理解的关键:变量,属性和函数参数(统称为“变量”)包含,当您使用赋值或将它们传递给它们时会复制这些值功能。引用对象的值称为对象引用,因为该值不是对象,它是对内存中其他对象的(指向)对象的引用。将引用传递给函数时,会复制引用,而对象不是。

不要将“对象引用”中的“引用”与“引用传递”中的“引用”混淆,它们完全不同的东西。 (在引用传递中,引用是变量,而不是对象.JavaScript没有传递引用。)