ES6中的let和const关键字博客描述文中所涉及的信息来源于网络和个人总结,旨在总结个人的学习和经验。如有侵权,请联系我删除,谢谢!介绍let和const是es6新增的两个关键字。它们的主要功能是声明变量。b=1;a//此时输出0b//此时输出1}a//此时报错ReferenceError:aisnotdefinedb//此时输出1常见环境当使用for循环时,适用使用let命令for(leti=0;i<10;i++){...}i//此时报错ReferenceError:iisnotdefined上面代码中,i只在for循环体,在循环体外调用会报错vara=[];for(vari=0;i<10;i++){a[i]=function(){console.log(i);}}a[8]();//10上面代码中,变量i是通过var命令声明的,在全局范围内有效,所以全局只有一个变量i。每次循环,变量i的值都会变化,循环中函数里面的console.log(i)赋值给数组a,里面的i指向全局的i。也就是说,数组a的所有成员中的i指向同一个i,导致运行时输出最后一轮i的值,即10。vara=[];for(leti=0;i<10;i++){a[i]=function(){console.log(i);}}a[8]();//8如果使用let,声明的变量只在块级作用域内有效,最终输出为8。没有变量提升let不存在变量提升,var存在变量提升“变量提升”的现象会出现在var命令中,即声明前可以使用变量,值为undefined,let命令改变了语法行为,其声明的变量必须在声明后使用,否则会报错.控制台日志(一);//ReferenceError:a未定义leta="apple";控制台日志(b);//undefinedvarb="香蕉";上面代码中,b在脚本开始运行的时候并没有定义它存在,但是还没有被赋值,所以返回undefined。a在变量声明之前不存在,所以会报错。const关键字用法const声明一个只读变量,声明后不允许更改。constPI="3.1415926";PI//此时输出为3.1415926PI=3;//TypeError:Assignmenttoconstantvariable.constMY_AGE;//此时报错SyntaxError:Missinginitializerinconstdeclarationconst必须在声明一次后进行初始化,否则会报错,只有在没有赋值的情况下声明才会报错该区域将不再受到影响外部影响vartmp=123;if(true){tmp='abc';//ReferenceErrorconsttmp;}临时死区的范围在代码块内,使用let或const命令声明变量不可用,直到该变量。if(true){//TDZ开始tmp='abc';//ReferenceErrorconsole.log(tmp);//ReferenceErrorlettmp;//TDZ结束console.log(tmp);//未定义tmp=123;控制台日志(tmp);//123}感谢全能网络菜鸟教程阮一峰的es6语法教程和辛勤的自我,个人博客,GitHub
