3 回答
TA贡献1856条经验 获得超11个赞
请看评论。
let arr = [1, 2, 3, 4];
function changeArr(ar) {
//console.log(ar)
ar = ['12', '11'] // creating a new array ie creating a new space in heap putting these values there and storing its reference in ar or assigning it to the reference
//console.log(ar)
return ar
}
function changeArr2(ar) {
ar.push(55); // here we have changed the array that is pointed by the reference stored in ar
return ar
}
console.log(changeArr(arr))
console.log(changeArr2(arr));
console.log(arr) // now the original array contains 55 too
有关更清晰的图片,请看这里 - https://stackoverflow.com/a/57852144/7849549
TA贡献1802条经验 获得超5个赞
function changeArr(ar){
console.log(ar)
ar = ['12','11'] // <- THIS LINE RIGHT HERE
console.log(ar)
return ar
}
您正在创建一个新数组,而不是操作旧数组。每次调用该函数时,您都在创建一个新数组并返回新数组(如果您调用该函数 5 次,您将获得 5 个新数组)。您作为输入传递的那个是无关紧要的,并且保持不变。
编辑您创建的新数组与作为输入传递的内容之间的唯一关系是它们在闭包内使用相同的变量名,因此,在该闭包内,您无法再访问输入和新数组同时。但那是另一个话题了...
也许这会让它更清楚:
var x = 'something that is not an array'
console.log(changeArr(x));
console.log(x);
这也许会让一切变得最清楚:
var arr = [1,2,3,4];
console.log(changeArr());
console.log(arr);
添加回答
举报