在函数内部变换JavaScript数组

inp*_*ive 3 javascript arrays

在JavaScript中,如何改变函数内部数组的值?我知道在使用某些数组方法时会发生这种情况,但它似乎不适用于正常分配.

var arr = [4]

function changeArray(arr) {
arr = [1,2,3];
}

// arr is still equal to [4]. I want it to equal [1,2,3].
Run Code Online (Sandbox Code Playgroud)

我的理解是这个代码不会改变函数之外的"arr"的值.我怎样才能改变作为参数传递的数组?

Fel*_*ing 6

你可以使用.splice:

arr.splice(0, arr.length, 1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

或者您可以清空数组和.push值:

arr.length = 0;
arr.push(1, 2, 3);
// or given an array of values
arr.push.apply(arr, newValues);
Run Code Online (Sandbox Code Playgroud)

但是,请确保它是明确表示,功能改变数组到位.虽然有本机函数可以执行此操作(例如Array#sort),但我认为这并不像简单地返回新数组那样常见.


我的理解是这个代码不会改变函数之外的"arr"的值.

正确.为变量或属性分配新值永远不会更改另一个变量或属性的值(例外:全局范围和with语句).你基本上试图改变变量的值,而不是改变值本身.

JavaScript是调用/传递/分配(维基百科也提到"通过共享"),而不是通过引用.