【问题标题】:Why is this array being passed by reference and not by value, and how can I change this? [duplicate]为什么这个数组是按引用而不是按值传递的,我该如何更改? [复制]
【发布时间】:2014-11-19 09:04:20
【问题描述】:

我正在处理我编写的一些代码中的一个错误,而罪魁祸首竟然是这个 sn-p(为了问题而简化了):

var a = [1, 2, 3, 5, 4];
// later...
function f(arr) {
    var sorted = arr.sort();
    // other stuff
}
// later...
console.log(a);
// logs [1, 2, 3, 4, 5]!

我的问题是,为什么a 在函数完成后保持排序?当然在 JS 中所有变量都是通过值而不是引用传递的?

【问题讨论】:

标签: javascript arrays pass-by-reference


【解决方案1】:

【讨论】:

  • 抱歉,这应该是评论,而不是答案。
  • 你说得对,但我不能添加 cmets。
【解决方案2】:

数组是一个对象。在 javascript 中,所有对象都是通过引用传递的。

【讨论】:

  • 对不起,这个答案是错误的。 Javascript 没有“按引用传递”(如在 C++ 或 PHP 中)。
  • 对象仅在 javascript 中通过引用传递,我对此很确定。我为它做了一个简单的小提琴。 jsfiddle.net/murli2308/npag0fj4
  • 这个话题已经被讨论到令人作呕,请阅读链接主题中的答案。简而言之,js 通过值传递所有内容,但这个值始终是一个引用(=指针)。
猜你喜欢
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2015-01-12
  • 2012-03-20
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多