JS 作用域 var与let 区别

219 阅读1分钟

在es6入门时,最让人傻傻分不清楚的就是var与let带来的作用域的苦恼。最近又一次翻看阮一峰老师的文章,重新有了自己的小结。

  1. 代码分析
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

以上两段代码区别在于var与let使用的作用域不同。 1.var 变量的作用域是全局,而let 是局部的块作用域即for循环内。 2.明确循环内部的i与console.log(i)中的i是在不同的作用域中,它们有各自单独的作用域。 3.全局变量唯一性,var 声明的变量i在循环中被不断覆盖最终只是唯一的10,因此在外部调用中无论调用a数组的哪一个,最终都是10。 4.局部使用 let 定义时只在该函数作用域内部有效。例子如下:

for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined

个人小结,如有错误,望各位大佬指正。