ES6
一、块级绑定
var 存在三个问题
1.允许重复的变量声明;容易导致数据被覆盖
2.变量提升:怪异数据访问、闭包问题
3.全局变量挂载到全局对象:全局对象成员污染问题
let 块级作用域
块级作用域:代码执行的时候遇见花括号就是一个块级作用域
1.当前作用域下,不可重复再声明
2.没有变量提升(底层实现上,let声明的变量还是会有提升的,但是,提升后会将其放到“暂时性死区”,所以访问时会报错的。)
3.声明的对象不会挂载到全局对象(块级作用域嘛)
!!!注意:循环中使用let 的循环变量,会特殊处理,每次进入循环会开启一个新的作用域,比如i<10 则有10个作用域,10个值,并且在循环之后会将let生命的i销毁掉!!!
for(var i = 0; i<2; i++ ){
console.log(i)
}
console.log(i)// 0 1 2
• for(let j = 0; j<2; i++ ){
• console.log(j)
• }
• console.log(j)//0 1 报错 销毁掉了
let arr = [];
for(let i=0; i<5;i++)
{
arr[i] = function (){
console.log(i);
}
}
for(let i=0; i<arr.length;i++)
{
a[i]();
}
const 块级作用域必须赋值
基本与let相同
(本质是变量指向的那个内存地址不改动)
1.常量必须在声明时赋值,且不可以重新赋值
!!!注意!!!如果说是复杂数据类型如数组,对象只要指针指向的地址不变即可,给对象新的属性也是可以的
2.当前作用域下,不可重复再声明
3.没有变量提升
4.声明的对象不会挂载到全局对象(块级作用域嘛)
!!!注意!!!普通for循环不可以用const