我最近一直在学习一些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
答案 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是一个对象。
通过引用传递对象。
因此,当您将数组(对象)传递给函数并对其进行修改时,它会持续存在。