之前的ES标准中,如果没有声明过a,则在任何地方声明a=1,在window下声明一个全局变量a;{a=1}for(b=1;b<2;b++){c=3}functionx(){d=4}x()console.log(a)//1console.log(b)//2console.log(c)//3console.log(d)//4并在函数中声明vara=1,a的作用域在当前函数中,否则a的作用域为window,两个变量都会晋升;console.log(a)//undefinedconsole.log(b)//undefinedconsole.log(c)//undefined{vara=1}for(varb=1;b<2;b++){varc=3}functionx(){vard=4}x()console.log(a)//1console.log(b)//2console.log(c)//3console.log(d)//d未定义并且当我们需要使用闭包时,即暴露一个隐藏的局部变量时,我们可以这样写;functionx(){vara=1b=function(){console.log(a)}}x()b()//1为了暴露一个隐藏的局部变量,我们还暴露了一个全局变量x,所以继续完善并声明匿名立即执行功能;(function(){vara=1b=function(){console.log(a)}}())b()//1为了实现这样的功能,我们费了那么大的劲儿。因此,let在ES6中应运而生。
