0

当变量引用对象时,值是对对象的引用(引用自: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);

有什么办法可以做到这一点?

4

1 回答 1

1

有什么办法可以做到这一点?

不是直接的。您所能做的就是传递一个对象并让函数修改其上的属性,就像在您的第一个示例中一样。JavaScript 没有按引用传递,只有按值传递。(当然,该值可能是一个对象引用,但它仍然是一个值。)在 JavaScript 中无法直接修改您传递给函数的变量/属性,因为函数接收的是值的副本该变量/属性,而不是对该变量/属性的引用。


只是为了澄清一些事情:在您的第一个代码块中,您说您正在“将对象发送给函数”。这是不正确的。您将对对象的引用发送到函数。

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

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

于 2013-09-13T07:44:19.953 回答