Javascript 通过引用而不是值传递?

标签 javascript pass-by-reference pass-by-value

<分区>

您好,感谢您的帮助

当我写一些代码时遇到了一个问题。在下面的例子中。我期待 alert(a.x) 输出 1,而不是它输出 2。我了解到这是因为 a 被传递给 this。 b 作为引用。我似乎找不到的是如何按值(value)传递它。 (例如,我不想每次调用 x() 时都修改 a )

var a = {"x":1}

function x() {
  this.b = v;
  this.b.x++;
}

x();

alert(a.x); //prints 2

我也尝试了以下和其他变体无济于事...

var a = {"x":1}

function x(v) {
  this.b = v;
  this.b.x++;
}

x(a);

alert(a.x); //... still prints 2

谁能告诉我我缺少什么?

谢谢你

(旁注:this is a post 接近我正在谈论的内容,但我无法弄清楚如何使其适用于我的情况......如果情况完全相同)

最佳答案

因此,也许我可以通过分解正在发生的事情来为您提供一些清晰度。

var a = {"x":1} // a refers to object with key "x"

function x(v) {  // v is now a reference to the object with key "x"
  this.b = v;   // this.b now is a reference to the object with key "x"
  this.b.x++;   //this.b.x++ points to the object with key "x" so it can increment it's value.
}

x(a);  // passes in a the value of reference to object with key "x"

alert(a.x); //... still prints 2

您可以做一些可以在 this 中找到的事情链接:

var o = {};
(function(x){
    var obj = Object.create( x );
    obj.foo = 'foo';
    obj.bar = 'bar';
})(o);

alert( o.foo ); // undefined

关于Javascript 通过引用而不是值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801375/

相关文章:

Java - 更新 HashMap 值的最佳方式 - 按值/引用传递相关

javascript - GZip 完整的 ASP.NET 网站

javascript - 在 Facebook 上运行 JQuery 或 Javascript

php - 为什么在调用反射方法时按引用传递变量不起作用?

c++ - 值参数的 const 正确性

C++内联函数,参数按值传递

javascript - Plyr视频播放器: How to expose/access multiple players?

javascript - 更改小数点分隔符

Javascript: array1[0] = array2[0];这是按值传递还是按引用传递?

c++ - 为什么c++中的引用传递用functionName(dataType& variableName)来表示?