在之前的es5中聲明變量只有兩種方式,var和function分別是聲明普通變量和聲明方法變量,es6中添加了我們常見的let和const命令外,import和class也屬于聲明變量的范疇,所以至此es6中一共有6種聲明變量的方法,下面逐步探討下es6變量在各個(gè)位置的不同點(diǎn)。
Let命令與var命令類似,但是let所聲明的變量只在命令所在的代碼塊中有效。例如for循環(huán)的計(jì)數(shù)器就適合用let來聲明,首先在for循環(huán)結(jié)束后變量也自動(dòng)回收,且用var的話聲明的計(jì)數(shù)器最終都會(huì)指向最后一個(gè)計(jì)數(shù)器,而let是每一輪變量都是重新生成的,JavaScript引擎內(nèi)部會(huì)記住上一輪循環(huán)的值,初始化本輪的變量時(shí)是在上一輪循環(huán)的基礎(chǔ)上計(jì)算的,所以每次輸出的都是不同的內(nèi)容。在同一作用域中var可以重復(fù)聲明變量而let的話則會(huì)直接拋異常。
變量提升和死區(qū)
Var命令會(huì)發(fā)生變量提升的現(xiàn)象let則不存在,變量提升現(xiàn)象指的是在變量聲明前使用此變量var會(huì)輸出undefined,而let則會(huì)直接拋ReferenceError異常,Es6中規(guī)定了,如果塊中存在let和const,那么這個(gè)塊存根一開始就會(huì)形成封閉作用域,只要在聲明這些變量之前使用了這些變量就會(huì)報(bào)錯(cuò),也稱為變量的暫時(shí)性死區(qū)。
上一篇: VueX與本地存儲(chǔ)
下一篇: 什么是es6——變量2