ES5变量声明之var:
1.var声明的变量,会出现声明提前的问题,内层变量覆盖外层变量
例如:var tmp = now Date();
function test() {
console.log(tmp); // undefined 声明提前
if(true){
var tmp = "hello world";
}
}
2.变量泄露,成为全局变量
例如:var s = 'Hello';
for(var i = 0;i<s.length;i++) {
console.log(s[i]);
}
console.log(i); // i = 5;
ES6 提供 let 和 const 来代替 var 声明变量:
优点:
1.不再需要立即执行的函数表达式(IIFE)
在 ES5 中,我们需要构造一个立即执行的函数表达式去保证我们不污染全局作用域。在 ES6 中, 我们可以使用更简单的大括号({}),然后使用 const 或者 let 代替 var 来达到同样的效果。
2.循环体中的闭包不再有问题
在 ES5 中,如果循环体内有产生一个闭包,访问闭包外的变量,会产生问题。在 ES6,你可以使用 “let” 来避免问题。
3.防止重复声明变量
ES6 不允许在同一个作用域内用 let 或 const 重复声明同名变量。这对于防止在不同的 js 库中存在重复声明的函数表达式十分有帮助。