1.var、let、const概述在ES6发布之前,Javascript只能通过var声明变量,无法区分常量、块级变量、函数变量的概念得到很好的体现。同时,如果你要使用或提供一个api,var声明的变量可以随时修改和重新赋值,这会让你时刻担心代码能否正常运行。ES6给我们带来了let和const。我们先来了解一下这三个标识符的特点:var:var定义了一个可以被重新赋值的变量,可能在整个函数(FunctionScope)中使用let:let定义了一个可以被重新赋值的变量,但是let可以在块作用域(BlockScope),没有变量提升const:const定义了一个不能被重新赋值的常量下面,我们将从作用域、变量提升和变量重分配开始,讲解var、let、const的区别和使用习惯。2.Scopevar的作用域当var定义的变量在函数内部时,通过函数外部调用该变量会导致UncaughtReferenceError:iisnotdefinederror:functiondoSomeThing(){vari=1;}console日志(我);//UncaughtReferenceError:iisnotdefined但是,在if、for、while等块级语句中通过var声明的变量仍然可以在块语句外访问:if(true){vari=1;}console.日志(我);//1let'sscopelet定义一个具有块级作用域属性的变量。在同一段代码中,我们使用let声明变量来查看结果:if(true){letj=1;}console.log(j);//UncaughtReferenceError:jisnotdefinedconst的作用域const的作用域规则和let类似。在同一代码中,我们使用const声明变量以查看结果:if(true){constk=1;}console.log(k);//UncaughtReferenceError:kisnotdefined3.变量提升先说结论:var声明的变量有变量提升,let和const就不来举例体验了:console.log(m);//undefinedvarm=1;console.log(n);//UncaughtReferenceError:nisnotdefinedletn=1;console.log(v);constv=1;//UncaughtReferenceError:visnotdefined推荐let和const的原因之一是为了避免在使用后面声明的变量时出现未知错误。4.let和const用法示例了解var、let和const之间的区别将帮助我们以更简洁易懂的方式表达我们的代码。先来看看你在什么情况下使用var?通过上面的介绍,我们大概明白了var与let和const的区别:函数作用域、可修改、变量提升,所以函数声明优先于变量声明,但是函数调用可以在变量声明之后的逻辑中使用var。varf={doThings:function(){console.log(i);}}变种我=1;//声明变量//函数调用f.doThings();//1let?的使用场景let一般用在for(while)循环和数学表达式计算中for(leti=0,len=100;i
