es6初学者入门教程(let命令的基本用法)
es6初学者入门教程(let命令的基本用法)x2用var定义在块内,其它和定义在块外是一样的,输出时,块内和块外均能正常输出。x1用let定义在块内,在块内输出正常,在块外提示“x1未定义”,并且其后面的命令不会再执行。这是因为x1用let定义后,其作用域仅限在块内,在块外无法访问,保定了其安全性,不至于造成变量泄露。图2 用浏览器通过F12调出控制后显示的结果在上面的a.html中,有三个变量x0 x1 x2,其中x0用let定义在块外,x1和x2分别用let和var定义在块内。然后我们在块内与块外,分别在控制台输入这三个变量。就出现了图2的结果。x0用let定义在块外,那么在块内和块外输出正常,并且都一样,变得像var了。
上一次,我们讲解了《前端开发:ES6 与 ECMAScript 2015 的关系》 这一节,我们开始进入ES6的详解,首先我要说明一下,在ES6之前,还有ES5,我们的ES6教程系列,主要是针对,ES6新增的命令进行讲解。若想索取编辑软件和源码,请关注我后,私信我索取软件或源码,其它课程请持续关注本号。
ES6新增了let命令,这个命令和var一样,都是用来声明变量的。只不过,let命令一般只用在{}中,也就是说let命令一般用在代码块中,如果let用在代码块外,那么就和var一样了。
直接上例子:
图1 示例文件 a.html
图2 用浏览器通过F12调出控制后显示的结果
在上面的a.html中,有三个变量x0 x1 x2,其中x0用let定义在块外,x1和x2分别用let和var定义在块内。然后我们在块内与块外,分别在控制台输入这三个变量。就出现了图2的结果。
x0用let定义在块外,那么在块内和块外输出正常,并且都一样,变得像var了。
x1用let定义在块内,在块内输出正常,在块外提示“x1未定义”,并且其后面的命令不会再执行。这是因为x1用let定义后,其作用域仅限在块内,在块外无法访问,保定了其安全性,不至于造成变量泄露。
x2用var定义在块内,其它和定义在块外是一样的,输出时,块内和块外均能正常输出。
我们下面两个应用的例子:
图3 FOR循环中用var定义i,在循环外输出i,结果是 10
图4 FOR循环中用let定义i,在循环外输出i,结果是报错显示“i未定义”
这说明如果循环中,用let定义变量i,则i的作用域仅在循环内。
好了,我们再看最后一个例子:
我们期望得到 6 ,但是输出结果是10
这样一改,就得到了我们期望的6
上面代码中,变量i是var声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的function在运行时,会通过闭包读到这同一个变量i,导致最后输出的是最后一轮的i的值,也就是10。
所以说 let命令的出现,也是为解决闭包的问题提供了一个方案。
后面课程更精彩,请大家持续关注。