为什么全局变量不受使用相同变量名的函数的影响?

时间:2017-10-04 19:20:49

标签: javascript

我觉得我几乎抓住它......就像直觉上有意义但我不知道为什么会有这些细节。有人可以解释一下:

为什么在这里,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]

1 个答案:

答案 0 :(得分:0)

第一个函数将arr声明为参数。

在函数内部,arr引用参数,而不是全局变量。

这称为范围。