块级作用域 ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来。这就造成了所谓的变量提升。 ES5的“变量提升”这一特性往往一不小心就会造成一下错误: 1.内层变量覆盖外层变量 var tmp = new Date(); function f() { console.log(tmp); if (false) { //执行则undefined var tmp = "hello world"; } } 2.变量泄露,成为全局变量 var s = 'hello'; for (var i = 0; i < s.length;