如何在JS中传递数组?

时间:2016-05-20 05:19:13

标签: javascript arrays

我最近一直在学习一些javascript的操作,并且有点不确定性能问题,我认为它与数组有关。 我写了一个简短的测试函数来测试数组是否通过引用传递。 他们是。我唯一的不安是:

究竟是如何通过的?

javascript中没有指针,对吧?

以下是测试功能:

function arr_test(arr) {
    for (var i = 0; i < arr.length; i++) {
        arr[i] = 50;
    }
}

function num_test(num) {
    num = 50;
}

var array = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
arr_test(array);
console.log(array);

var num = 10;
num_test(num);
console.log(num);

输出符合预期:

Array [ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 ]
10

2 个答案:

答案 0 :(得分:1)

Javascript传递值per references(原始值除外,如字符串或数字)。 JS中有一些指针(事实上几乎所有东西都是原语都是引用),但是它们是隐藏的并且是自动管理的(例如Java或Python)。

不复制数组。函数arr_test中的函数与函数外部函数相同。因此,如果您更改其值,它将反映在函数外部。

但是,在num_test函数中,您没有更新您获得的数字值作为参数。你正在做的是将函数内的num变量分配给内存中其他位置的另一个数字。函数外部的num变量不会更改。 这实际上与num作为引用或变量传递的事实无关。如果不是更新arr[i] arr_test,而是更新arr = [50, 50](即将另一个对象分配给给定参数而不是更新您提供的参数),array在函数之外的值也不会更新。

答案 1 :(得分:0)

几乎所有东西都是javaScript是一个对象。

通过引用传递对象。

因此,当您将数组(对象)传递给函数并对其进行修改时,它会持续存在。