【问题标题】:Dynamic variable in Javascript (call by reference)Javascript 中的动态变量(通过引用调用)
【发布时间】:2013-09-13 07:40:19
【问题描述】:

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

有什么办法可以做到吗?

【问题讨论】:

  • 很难理解您在这里真正想要实现的目标。你想在函数的帮助下改变对象的属性值吗?

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


【解决方案1】:

有什么办法可以做到吗?

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


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

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

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

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多