ES6
ECMAScript 第六个版本
一、let 命令
在ES6之前,都是用 var声明,但是它会变量提升成为全局变量。
function a() {
if (bool) {
var b = 'Hello ES6'
} else {
console.log(b)
}
}
其实是这样的
function a() {
var b
if (bool) {
b = 'Hello ES6'
} else {
//undefined
console.log(b)
}
//undefined
}
无论bool的值是true 或 false,b 都会被创建声明。改写成let function a() {
if (bool) {
let b = 'Hello ES6'
} else {
//ReferenceError: a is not defined.
console.log(b)
}
}
let没有变量提升,它的作用域是当前所在的代码块块级作用域
ES5只有全局作用域和函数作用域,带来一些不合理的场景。
(1)、变量提升造成内部变量覆盖外层的变量
var status= true;
function st() {
if (false) {
var status = false;
}
console.log(status);
}
st(); //undefined(2)、变量i成为全局变量 var arr=[1,2,3,4,5,6];
for(var i