首先,以大分类来看,let,const区别于var,前者不存在变量声明提前,原因是暂时性死区。然而,暂时性死区是如何形成的,或者说为什么会形成暂时性死区?参考了一篇变量声明过程的文章,let,const在声明变量时,将声明和初始化值两个阶段结合在了一起,var则是分开的。
而另一方面,let只能生效于所在代码块内。值得注意的是,如:if(true){let a=1}这种语句,如果去掉大括号,就会报错
值得一提的是,在这一部分内容中,有提到一个点,需要注意最好不要在一个方法内用声明式的方式来定义一个子方法,即function a(){}。因为对于es6和es5浏览器来说,它们对于这种形式的写法,会有不同的解释方式,所以最好使用表达式的形式来写。
最后,关于const定义的数据,const对于简单的数据结构(诸如:字符串,布尔值,数值),可以保证值是常量。而其原因则是变量保存的是数据的地址,而地址里住的是数据本身,即简单数据结构。然而,对于复杂数据结构(对象,数组等),地址里住的是指向复杂数据结构(对象数组等)内部数据的指针,const虽然保证了指针不变,但是指针所指向的地址,它们的数据可不一定被“const”了。
阅读es6后对let,var和const区别小结
最新推荐文章于 2024-05-07 07:32:24 发布