在JavaScript函数中更改数组会更改函数外的数组吗?

Tom*_*Tom 5 javascript arrays object

为什么这两个脚本的行为不同?我希望使用第一个脚本,但在第二个drawData()调用中它会改变data; 这很奇怪而不是我想要发生的事情.第二个脚本没有这个问题.为什么会这样,我如何修复第一个脚本?

第一个脚本不会改变data:

var data = ["right"];

function drawData(arrs, type) {
    if (type == "percentage") {
        arrs[0] = "omg";
    }
    alert(data[0]); // Changed!?
}
drawData(data);
drawData(data, "percentage");
Run Code Online (Sandbox Code Playgroud)

第二个脚本:

var data = "right";

function drawData(arrs, type) {
    if (type == "percentage") {
        arrs = "omg";
    }
    alert(data); // OK, not changed.
}
drawData(data);
drawData(data, "percentage");
Run Code Online (Sandbox Code Playgroud)

Kon*_*uda 0

第一个变体修改作为参数传递给函数的对象(恰好是数组) - 因此这种更改可以在函数外部看到。第二个变体为函数参数分配新值(恰好是对数组的引用),但不更改数组本身。

  • 对于这个问题的回答太不清楚/神秘,并且使用了定义不明确的术语:“更改对此数组的引用”?它还将范围(局部变量的分配)与对象可变性(对象的属性分配)混合在一起。 (2认同)