ES6中的let命令
Posted 寻找薛定谔的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6中的let命令相关的知识,希望对你有一定的参考价值。
ES6新增了let命令,用于声明变量。其用法类似var,区别是使用let命令声明的变量只在当前代码块有效。
for循环的计数器就很适合使用let命令。
var arr= [1,2,3,4,5]; for(var i=0;i<arr.length;i++){ //something to do... } alert(i); //运行结果为5,但如果使用let,会报错i is not defined
下面的代码如果使用var,最后将输出10;
1 var a = []; 2 for(var i = 0;i<10;i++){ 3 a[i] = function(){ 4 alert(i); 5 } 6 } 7 var func = a[7]; 8 func();
这是因为变量i使用var声明,在全局范围内有效,每次循环新的i值就会覆盖旧值。
而如果使用let声明变量,i只在本次循环中有效,所以以下代码的输出结果为7。
1 var a = []; 2 for(let i = 0;i<10;i++){ 3 a[i] = function(){ 4 alert(i); 5 } 6 } 7 var func = a[7]; 8 func();
使用let声明变量,变量一定要在声明后使用,不然会报变量未定义的错误。
1 console.log(str); 2 var str = "111" //undefined 3 // let str = "111"; //str is not defined
上面的代码如果使用var声明变量str,仅仅会输出变量undefined。而使用let命令声明,则会抛出str is not defined异常。
只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。ES6规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用这些变量就会报错。这在语法上称作“暂时性死区”(temporal dead zone)。
1 var tmp = 123; 2 if(true){ 3 tmp = "abc"; //tmp is not defined 4 let tmp; //将声明的变量绑定到这个区域,不再受外部影响 5 }
参考阮一峰《ES6标准入门》
以上是关于ES6中的let命令的主要内容,如果未能解决你的问题,请参考以下文章