我觉得我几乎抓住它......就像直觉上有意义但我不知道为什么会有这些细节。有人可以解释一下:
为什么在这里,global arr不会在函数之外受到影响
arr = [1,2,3]
function test(arr, a, b) {
arr = arr.filter(item => (a < item && item < b))
console.log(arr) // [2]
}
test(1, 3)
console.log(arr) // [1,2,3]
为什么在这里,全局arr IS在功能之外受到影响
arr = [1,2,3]
function test(a, b) {
arr = arr.filter(item => (a < item && item < b))
console.log(arr) // [2]
}
test(1, 3)
console.log(arr) // [2]
编辑另一个例子。为什么全局arr IS在功能之外受到影响甚至又将arr作为参数传递
arr = [1,2,3]
function test(arr, a, b) {
for (let i = 0; i < arr.length; i++) {
let val = arr[i];
if (a >= val || val >= b) {
arr.splice(i, 1);
i--;
}
}
console.log(arr) // [2]
}
console.log(arr) // [2]
答案 0 :(得分:0)
第一个函数将arr
声明为参数。
在函数内部,arr
引用参数,而不是全局变量。
这称为范围。