JavaScript中用let语句声明作用域的用法讲解
语法
letvariable1=value1
参数
variable1
要声明的变量的名称。
value1
赋给变量的初始值。
备注
使用let语句声明一个变量,该变量的范围限于声明它的块中。 可以在声明变量时为变量赋值,也可以稍后在脚本中给变量赋值。
使用let声明的变量,在声明前无法使用,否则将会导致错误。
如果未在let语句中初始化您的变量,则将自动为其分配JavaScript值undefined。
示例:
varl=10; { letl=2; //Atthispoint,l=2. } //Atthispoint,l=10. //Additionalwaystodeclareavariableusinglet. letindex; letname="ThomasJefferson"; letanswer=42,counter,numpages=10; letmyarray=newArray();
块级作用域
for(vari=0;i<10;i++){} console.log(i);//10 for(letj=0;j<10;j++){} console.log(j);//"ReferenceError:jisnotdefined
不存在变量提升
console.log(a);//输出undefined console.log(b);//报错ReferenceError console.log(c);//报错ReferenceError vara=2; letb=2;
注意区别undefined和ReferenceError
暂时性死区(TDZ)
只要进入当前块级作用域,所使用的变量已经存在了,但在声明之前都属于死区,不可进行操作。
注意:typeof不再是100%安全的操作
typeofx;//ReferenceError typeofy//undefined letx;
不允许重复声明
letx=1; letx;//"SyntaxError:Identifier'x'hasalreadybeendeclared vary=2; vary=3;//y=3
块级作用域
//匿名函数写法 (function(){ vartmp=...; ... }()); //块级作用域写法 { lettmp=...; ... }
ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。
//ES5 'usestrict'; if(true){ functionf(){}//报错 }
ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少
//报错 'usestrict'; if(true) functionf(){}
声明的全局变量不再是window的属性
"usestrict"; vara=1; console.log(window.a)//1 letb=1; console.log(window.b)//undefined