亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

ES6學(xué)習(xí)筆記--塊級(jí)綁定

wangshijun / 1265人閱讀

摘要:對(duì)比常量聲明與聲明常量聲明與聲明,都是塊級(jí)聲明。最后一點(diǎn)全局塊級(jí)綁定與不同于的另一個(gè)方面是在全局作用域上的表現(xiàn)。塊級(jí)綁定新的最佳實(shí)踐在的發(fā)展階段,被廣泛認(rèn)可的變量聲明方式是默認(rèn)情況下應(yīng)當(dāng)使用而不是??偨Y(jié)與塊級(jí)綁定將詞法作用域引入。

var變量與變量提升

使用var關(guān)鍵字聲明的變量,無(wú)論其實(shí)際聲明位置在何處,都會(huì)被視為聲明于所在函數(shù)的頂部(如果聲明不在任意函數(shù)內(nèi),則被視為在全局作用域的頂部)。這就是所謂的變量提升(hoisting)

后臺(tái)實(shí)際上會(huì)轉(zhuǎn)化成這樣

value變量的聲明被提升到了頂部,而初始化工作則保留在原處。這以為著在else分支value的變量也是可訪問(wèn)的,此處它的值會(huì)是undefined,因?yàn)樗](méi)有被初始化。

塊級(jí)聲明

塊級(jí)聲明也就是讓所聲明的變量在指定快的作用域外無(wú)法被訪問(wèn)。塊級(jí)作用域在如下情況被創(chuàng)建;
1 在一個(gè)函數(shù)內(nèi)部
2 在一個(gè)代碼塊(由一對(duì)花括號(hào)包裹)內(nèi)部

let聲明語(yǔ)法域var語(yǔ)法一致

let聲明沒(méi)有被提升到函數(shù)定義的頂部,這樣使用會(huì)報(bào)

上面就是塊級(jí)作用域的基本使用。下面會(huì)帶來(lái)一點(diǎn)let和var特別的地方

禁止重復(fù)聲明

如果一個(gè)標(biāo)識(shí)符已經(jīng)在代碼塊內(nèi)部被定義,那么在此代碼塊內(nèi)使用同一個(gè)標(biāo)識(shí)符進(jìn)行l(wèi)et聲明就會(huì)導(dǎo)致拋出錯(cuò)誤


上面會(huì)報(bào)錯(cuò),但是var聲明是不會(huì)的


不在同一級(jí)別聲明變量,不會(huì)報(bào)錯(cuò),這個(gè)新變量會(huì)屏蔽全局的
count變量,從而在局部阻止對(duì)于后者的訪問(wèn)。

常量聲明

const常量,它們的值在被設(shè)置完成后就不能再被改變,所有的const變量都需要在聲明試進(jìn)行初始化。

對(duì)比常量聲明與let聲明
1 常量聲明與let聲明,都是塊級(jí)聲明。這意味著常量在聲明它們的語(yǔ)句塊外部是無(wú)法訪問(wèn)的,并且聲明也不會(huì)被提升
2 const變量和let另一個(gè)相似的地方,也是禁止重復(fù)聲明

使用const聲明對(duì)象
const聲明會(huì)阻止對(duì)于變量綁定與變量本身自身值的修改,這意味著const聲明并不會(huì)阻止對(duì)變量成員的修改

記住:const阻止的是變量綁定的修改,而不是阻止對(duì)成員值的修改。

暫時(shí)性死區(qū)

使用let或const聲明的變量,在達(dá)到聲明處之前都是無(wú)法訪問(wèn)的,試圖訪問(wèn)會(huì)導(dǎo)致一個(gè)引用錯(cuò)誤,即使在通常是安全的操作時(shí)(例如使用typeof運(yùn)算符),也是如此

塊級(jí)作用域最需要使用的場(chǎng)景1-循環(huán)中的塊級(jí)綁定


對(duì)比var let明顯使用let符合我們的使用期望。

塊級(jí)作用域最需要使用的場(chǎng)景2-循環(huán)內(nèi)的函數(shù)

上述原因因?yàn)樽兞縤在循環(huán)的每次迭代被共享了(沒(méi)有塊級(jí)作用域)
為了修正這個(gè)問(wèn)題,開(kāi)發(fā)者在循環(huán)內(nèi)使用立即調(diào)用函數(shù)表達(dá)式,以便在每次迭代中強(qiáng)制創(chuàng)建變量的一個(gè)新副本

幸運(yùn)的是使用let完美解決這個(gè)問(wèn)題


let每次使用完,就銷(xiāo)毀重新創(chuàng)建。

循環(huán)內(nèi)的常量聲明

在常規(guī)的for循環(huán)中,你可以初始化時(shí)使用const。但循環(huán)會(huì)在試圖改變?cè)撟兞康闹禃r(shí)拋出錯(cuò)誤。

BUT!!!!!!!!!!!!!
const變量在for-in或for-of循環(huán)中使用時(shí),與let變量效果相同。

最后一點(diǎn)---全局塊級(jí)綁定

let與const不同于var的另一個(gè)方面是在全局作用域上的表現(xiàn)。當(dāng)在全局作用域上使用var時(shí),它會(huì)創(chuàng)建一個(gè)新的全局變量,并成為全局對(duì)象(在瀏覽器中是window)的一個(gè)屬性,這意味著使用var可能會(huì)無(wú)意覆蓋一個(gè)已有的全局屬性

然而若你在全局作用域上使用let或者const。雖然在全局作用域上會(huì)創(chuàng)建新的綁定,但不會(huì)有任何屬性被添加到全局對(duì)象上。這也就意味著你不能使用let或const來(lái)覆蓋一個(gè)全局變量,你只能將其屏蔽。

塊級(jí)綁定新的最佳實(shí)踐

在es6的發(fā)展階段,被廣泛認(rèn)可的變量聲明方式是:默認(rèn)情況下應(yīng)當(dāng)使用let而不是var。對(duì)于多數(shù)js開(kāi)發(fā)者來(lái)說(shuō),let的行為方式正式var本應(yīng)有的方式,因此直接用let代替var更符合邏輯。

然而隨著更多的開(kāi)發(fā)者遷移到es6上,一種代替方案變得更為流行。那就是默認(rèn)情況下使用const,并且只在知道變量值需要被更改的情況下才使用let。其理論依據(jù)是大部分變量在初始化之后都不應(yīng)當(dāng)被修改,以為預(yù)期外的改動(dòng)是bug的源頭之一。

總結(jié)

let 與 const 塊級(jí)綁定將詞法作用域引入js。這兩種聲明方式都不會(huì)進(jìn)行提升。并且只會(huì)在聲明它們的代碼塊內(nèi)部存在。由于變量能夠再必要位置被準(zhǔn)確聲明,其表現(xiàn)更加接近其他語(yǔ)言,并且能減少無(wú)心錯(cuò)誤的產(chǎn)生,作為一個(gè)副作用,你不能在變量聲明位置之前訪問(wèn)它們,即便使用的是typeof 這樣的安全運(yùn)算符,由于塊級(jí)綁定存在暫時(shí)性死區(qū),試圖在聲明位置之前訪問(wèn)它就會(huì)導(dǎo)致錯(cuò)誤。

let與const的表現(xiàn)在很多情況下都相似與var ,然后在循環(huán)中就不是這樣,在for-in與for-of循環(huán)中。let與const都能每一次迭代時(shí)創(chuàng)建一個(gè)新的綁定,這意味著在循環(huán)體內(nèi)創(chuàng)建的函數(shù)可以使用當(dāng)前迭代所綁定的循環(huán)變量值(而不是像使用var那樣,統(tǒng)一使用循環(huán)結(jié)束時(shí)的變量值)。這一點(diǎn)在for循環(huán)中使用let聲明時(shí)也成立,不過(guò)在for循環(huán)中使用const聲明則會(huì)導(dǎo)致錯(cuò)誤。

塊級(jí)綁定當(dāng)前的最佳實(shí)踐就是:在默認(rèn)情況下使用const.而只在你知道變量值需要被更改的情況下才使用let。這在代碼中能夠確?;緦哟蔚牟豢勺冃裕兄诜乐鼓承╊?lèi)型的錯(cuò)誤。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/89039.html

相關(guān)文章

  • 深入理解ES6 (一) 塊級(jí)綁定

    摘要:聲明聲明的語(yǔ)法與的語(yǔ)法一致。總結(jié)文章都是以深入理解讀書(shū)筆記形式,大部分引用書(shū)中的定義,加上作者的理解,樣例也做了調(diào)整,所有樣例都可以放到里運(yùn)行親自嘗試。 1.變量提升 使用 var 關(guān)鍵字聲明的變量,無(wú)論其實(shí)際聲明位置在何處,都會(huì)被視為聲明于所在函數(shù)的 頂部(如果聲明不在任意函數(shù)內(nèi),則視為在全局作用域的頂部)。這句話(huà)從字面上不難理解。 但是他是怎樣一個(gè)過(guò)程,為什么會(huì)這樣。當(dāng)你代...

    KunMinX 評(píng)論0 收藏0
  • 深入理解ES6筆記(一)塊級(jí)作用域綁定

    摘要:和都能夠聲明塊級(jí)作用域,用法和是類(lèi)似的,的特點(diǎn)是不會(huì)變量提升,而是被鎖在當(dāng)前塊中。聲明常量,一旦聲明,不可更改,而且常量必須初始化賦值。臨時(shí)死區(qū)臨時(shí)死區(qū)的意思是在當(dāng)前作用域的塊內(nèi),在聲明變量前的區(qū)域叫做臨時(shí)死區(qū)。 主要知識(shí)點(diǎn)有:var變量提升、let聲明、const聲明、let和const的比較、塊級(jí)綁定的應(yīng)用場(chǎng)景showImg(https://segmentfault.com/img...

    馬忠志 評(píng)論0 收藏0
  • ES6學(xué)習(xí)筆記之箭頭函數(shù)

    摘要:特性介紹箭頭函數(shù)是新增的特性之一,它為這門(mén)語(yǔ)言提供了一種全新的書(shū)寫(xiě)函數(shù)的語(yǔ)法。用生成的函數(shù)會(huì)定義一個(gè)自己的,而箭頭函數(shù)沒(méi)有自己的,而是會(huì)和上一層的作用域共享。 本文同步自我得博客:http://www.joeray61.com JS中的箭頭 箭頭在JS里并不算是個(gè)新鮮的玩意兒,一直以來(lái),JS都支持-->這樣的箭頭。 很早的時(shí)候有些瀏覽器還不支持JS,當(dāng)時(shí)的人們?yōu)榱思嫒葸@些瀏覽器,需要這...

    Vultr 評(píng)論0 收藏0
  • ES6筆記之 let && const

    摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會(huì)報(bào)錯(cuò)。在語(yǔ)法上稱(chēng)為暫時(shí)性死區(qū)有時(shí)候,會(huì)不經(jīng)間遇到比較隱蔽的死區(qū),不太容易被發(fā)現(xiàn)。不允許重復(fù)聲明不允許在相同的作用域內(nèi)聲明同一個(gè)變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內(nèi)有效。 { let a = 10; } console.log(a) //R...

    aristark 評(píng)論0 收藏0
  • 《深入理解ES6筆記——塊級(jí)作用域綁定(1)

    摘要:沒(méi)有聲明的情況和都能夠聲明塊級(jí)作用域,用法和是類(lèi)似的,的特點(diǎn)是不會(huì)變量提升,而是被鎖在當(dāng)前塊中。聲明常量,一旦聲明,不可更改,而且常量必須初始化賦值。臨時(shí)死區(qū)的意思是在當(dāng)前作用域的塊內(nèi),在聲明變量前的區(qū)域叫做臨時(shí)死區(qū)。 本章涉及3個(gè)知識(shí)點(diǎn),var、let、const,現(xiàn)在讓我們了解3個(gè)關(guān)鍵字的特性和使用方法。 var JavaScript中,我們通常說(shuō)的作用域是函數(shù)作用域,使用var聲...

    2bdenny 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<