块级作用域
ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来。这就造成了所谓的变量提升。
ES5的“变量提升”这一特性往往一不小心就会造成一下错误:
内层变量覆盖外层变量
var tmp = new Date();function f() { console.log(tmp); if (false) { //执行则undefined var tmp = "hello world"; } }变量泄露,成为全局变量
var s = 'hello';for (var i = 0; i < s.length; i++) { console.log(s[i]); }console.log(i); // 5
往常我们往往是使用闭包来解决这一问题的(比如自执行函数)。现在,基于这一问题,ES6增加了块级作用域,所以不再需要自执行函数了。
let 和 const
ES6是是向后兼容的,而保持向后兼容性意味着永不改变JS代码在Web平台上的行为,所以
延伸阅读
学习是年轻人改变自己的最好方式