第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

js聲明一個(gè)值不會(huì)改變的變量時(shí),const相比let有什么優(yōu)勢(shì)?

js聲明一個(gè)值不會(huì)改變的變量時(shí),const相比let有什么優(yōu)勢(shì)?

蝴蝶刀刀 2018-10-02 13:24:50
最近在學(xué)習(xí)es6,看到很多人說(shuō)聲明常量時(shí)建議使用const而不是let, 想了解一下這個(gè)是什么原因, 不論變量的值是否發(fā)生變化都使用let會(huì)出現(xiàn)問(wèn)題嗎
查看完整描述

1 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

這問(wèn)題的重點(diǎn)在const與let的相較,我先說(shuō)明一下const。

在ES6之前,并沒(méi)有"常量"這個(gè)東西,只有"變量"而已,也就是用var所聲明的識(shí)別名稱。在這份舊的Google JavaScript樣式風(fēng)格指引中,會(huì)告訴你要用全大寫英文字符來(lái)作為常量定義,像是var MAX_HEIGHT = 10這種定義方式,甚至是使用非常特別的注釋中的@const標(biāo)記,有可能Google Chrome瀏覽器會(huì)在內(nèi)部處理時(shí)認(rèn)得它是個(gè)常量,但很少見(jiàn)到有人這樣用,畢竟也只有對(duì)Chrome有用而已。對(duì)JavaScript來(lái)說(shuō),用var來(lái)聲明就是個(gè)變量。

const針對(duì)是常量的聲明,常量在一聲明時(shí)就必定要賦給值,不然會(huì)產(chǎn)生錯(cuò)誤。而對(duì)于常量在ES6的定義是:

不可再賦值(can't re-assignment)

賦值的意思就是用等號(hào)(=)作賦值運(yùn)算,像下面這例子就是再賦值(或重覆賦值),所以會(huì)產(chǎn)生錯(cuò)誤:

const a = 10a = 20  // 錯(cuò)誤TypeError: Assignment to constant variable.

注: JS中的賦值運(yùn)算符除了等號(hào)(=)外,還有多種等號(hào)(=)與其他運(yùn)算符組合而成的賦值運(yùn)算符,請(qǐng)參考MDN的Assignment_Operators

聲明了一個(gè)常量,代表這個(gè)識(shí)別名稱的參照(reference)是唯讀的(read-only),并不代表這個(gè)參照賦到的值是不可改變的(immutable),"const"只是針對(duì)存取層級(jí)的限制(access limitations),并不是不可改變性(immutability)。

上面這段這是在講什么?這是在講如果你聲明的常量是一個(gè)對(duì)象、函數(shù)(也是對(duì)象)或數(shù)組類型,像這種參照類型的值,里面的值是可以再作改變的。像下面的例子都是合法的使用:

const a = []
a[0] = 1const b = {}
b.foo = 123

所以對(duì)于對(duì)象、數(shù)組、函數(shù)來(lái)說(shuō),使用const常量來(lái)聲明就可以,除非你有需要再對(duì)這個(gè)數(shù)組或?qū)ο蟮膮⒄罩匦沦x值。

雖然"const"是來(lái)自英文中的"constant"(常量)字詞的縮寫,但在ES6的標(biāo)準(zhǔn)文檔中,經(jīng)常會(huì)在規(guī)則中,用對(duì)"variable"(變量)這個(gè)字詞,一并說(shuō)明這兩個(gè)共同的特性,上面的錯(cuò)誤消息中就可以看到"constant variable"(固定的變量/不會(huì)變的變量),這意思較為接近,也就是把它當(dāng)成是一種擁有固定值特性的變量來(lái)看待。ES6中對(duì)"const"與"let"仍然有區(qū)分,在區(qū)分中的說(shuō)明章節(jié),是對(duì)于詞法環(huán)境綁定(就塊級(jí)作用域),是否為可改變的(lexEnvRec.CreateMutableBinding)或不可改變的(lexEnvRec.CreateImmutableBinding)兩種情況。


查看完整回答
反對(duì) 回復(fù) 2018-11-10
  • 1 回答
  • 0 關(guān)注
  • 725 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)