ES6最基本的定义就是变量let,两句话概括
(1)生成自己的块级作用域(作用只存在于大括号)
(2)没有变量提升
怎么理解这两句话
1. 有一个在例子说明了一下生成自己的块级作用域 ,也是最基本的与var的区别
var a = [];
for (var i = 0; i<10; i++){
a[i] = function(){
console.log(i);
}
};
a[1](); //10
a[5](); //10
a[9](); //10
对于var ,简单的理解就是在执行函数的a[1](),a[5](),a[9]()的时候,第一层循环已经执行完了,因此所有都是10
var b = [];
for (let i = 0; i<10; i++){
b[i] = function(){
console.log(i);
}
};
b[1](); //1
b[5](); //5
b[9](); //9
let就是只对本轮循环有效,他的计算是利用JavaScript 引擎内部记住上一次的值进行循环
for (let j = 0; j<10 ; j++){
let j = 456;
console.log(j); //456
}
输出456说明一个问题,就是两个j是在不同的作用域,for里面的let属于一个父级作用域,for里面的循环是一个单独的子作用域
2.关于没有变量提升,简单的说就是后定义会报错
console.log(b); //undefined
console.log(a); //报错
var b = 2;
let a = 1;
只要是用let定义,定义之前使用都会报错