成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript的變量聲明

zhongmeizhi / 1152人閱讀

摘要:變量提升是在預(yù)編譯的過(guò)程中發(fā)生的,賦值為被聲明的變量還是在原來(lái)的地方,真正被賦值塊級(jí)聲明塊級(jí)聲明用于聲明在指定塊的作用域之外無(wú)法訪問(wèn)的變量。只有執(zhí)行變量聲明語(yǔ)句后,變量才會(huì)從中移出,然后才可以正常訪問(wèn)。

在代碼中,聲明變量是基礎(chǔ),但是在javascript中,經(jīng)歷了從var到let,const的變化,到底有什么本質(zhì)上的區(qū)別呢?

本文的原文在我的博客中:https://github.com/RachelRen/blog/issues/25

歡迎star

var 聲明的提升

var 不管在哪里聲明的,都會(huì)被當(dāng)成在當(dāng)前作用域頂部聲明的。

變量提升是在預(yù)編譯的過(guò)程中發(fā)生的,賦值為undefined

被聲明的變量還是在原來(lái)的地方,真正被賦值

塊級(jí)聲明

塊級(jí)聲明用于聲明在指定塊的作用域之外無(wú)法訪問(wèn)的變量。

在同一作用域內(nèi),相同的標(biāo)識(shí)符只能有一個(gè)

當(dāng)執(zhí)行流離開(kāi)這個(gè)塊級(jí),那么這些變量會(huì)被銷毀

塊級(jí)作用域中的變量會(huì)屏蔽全局作用域中的相同標(biāo)識(shí)符的變量(即取的是塊級(jí)作用域中的值)

const 不能再賦值,但是可以修改對(duì)象的屬性值

不會(huì)變量提升

臨時(shí)死區(qū)

let 和 const 是不會(huì)變量提升的,所以在聲明變量之前,是用typeof是會(huì)報(bào)錯(cuò)的。

臨時(shí)死區(qū)(TDZ)用來(lái)描述let/const不提升的效果

Javascript引擎在掃描代碼發(fā)現(xiàn)變量聲明時(shí),要么將他們提升到作用域頂部(var聲明),要么將聲明放到TDZ(臨時(shí)死區(qū))中,訪問(wèn)TDZ中的變量會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤。只有執(zhí)行變量聲明語(yǔ)句后,變量才會(huì)從TDZ中移出,然后才可以正常訪問(wèn)。

let 聲明在循環(huán)內(nèi)部的行為是標(biāo)準(zhǔn)中專門定義的,它不一定與let的不提升特性相關(guān)。

在循壞中的應(yīng)用

在for-in 和 for-of 循環(huán)中,let和const會(huì)每次迭代時(shí)創(chuàng)建新綁定,所以在循環(huán)體內(nèi),每次都訪問(wèn)到響應(yīng)的迭代值。但在for-lenght中,const會(huì)報(bào)錯(cuò)。

在全局作用域中的區(qū)別

var在全局作用域中,會(huì)創(chuàng)建一個(gè)新的全局變量作為全局對(duì)象。
let/const會(huì)在全局作用域下創(chuàng)建一個(gè)新的綁定,但是這個(gè)綁定不會(huì)添加為全局對(duì)象的屬性(let/const不能覆蓋全局,只能屏蔽它)

用var來(lái)定義全局變量,可以用在瀏覽器的跨frame或跨window訪問(wèn)代碼。

最佳實(shí)踐

默認(rèn)使用const,只在確定需要改變值的時(shí)候用let。為了實(shí)現(xiàn)代碼的不可變,防止某些錯(cuò)誤的產(chǎn)生。

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

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

相關(guān)文章

  • 理解 Javascript變量作用域

    摘要:在中,沒(méi)有塊級(jí)作用域一說(shuō)在或者等語(yǔ)言中,等語(yǔ)句塊內(nèi)可以包含自己的局部變量,這些變量的作用域是這些語(yǔ)句的語(yǔ)句塊,而在中,不存在塊級(jí)作用域的說(shuō)法。作用域鏈如果要深入理解中變量的作用域,那就必須拿出作用域鏈這個(gè)終極武器。 Javascript 這門語(yǔ)言與其他的大部分語(yǔ)言相比,有很多特殊性,這是很多人喜歡它或者討厭它的原因。其中變量的作用域問(wèn)題,對(duì)很多初學(xué)者來(lái)說(shuō)就是一個(gè)又一個(gè)「坑」。 變量的...

    Rocture 評(píng)論0 收藏0
  • JavaScript 變量聲明提升

    摘要:輸出的結(jié)果為輸出的結(jié)果為提升后輸出的結(jié)果為重新定義了變量輸出的結(jié)果為如果定義了相同的函數(shù)變量聲明,后定義的聲明會(huì)覆蓋掉先前的聲明,看如下代碼輸出練習(xí)的值是多少的值是多少第二題的解析請(qǐng)看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個(gè)小例子 先來(lái)看個(gè)例子: console.log(a); // undefined var a =...

    fireflow 評(píng)論0 收藏0
  • 【譯】理解JavaScript:作用域

    摘要:作用域是代碼的不同部分在運(yùn)行期間的可見(jiàn)性。大多數(shù)開(kāi)發(fā)者想當(dāng)然地理解作用域,但毫無(wú)疑問(wèn),有它自己的說(shuō)明。變量可能是全局作用域的,或者是方法作用域的。總而言之,不要重復(fù)聲明變量,使用良好命名,盡力避免在聲明前調(diào)用和執(zhí)行任何東西。 原文鏈接:https://hackernoon.com/unders... 什么是作用域? 就像JavaScript中的其他東西一樣,作用域并無(wú)特別之處。盡管大多...

    betacat 評(píng)論0 收藏0
  • JavaScript預(yù)編譯過(guò)程分析

    摘要:一概念是一個(gè)單線程解釋型的編程語(yǔ)言。預(yù)編譯大致可分為步創(chuàng)建對(duì)象找形參和變量聲明,將形參和變量名作為屬性名,值為將實(shí)參值和形參統(tǒng)一在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。 一、JavaScript概念 JavaScript ( JS ) 是一個(gè)單線程、解釋型的編程語(yǔ)言。 二、JavaScript語(yǔ)言特點(diǎn) 2.1 單線程 JavaScript語(yǔ)言的一大特點(diǎn)就是單線程,也就是說(shuō),同一個(gè)時(shí)間只能...

    graf 評(píng)論0 收藏0
  • JavaScript-預(yù)編譯

    摘要:預(yù)編譯發(fā)生在函數(shù)執(zhí)行前也就是說(shuō)函數(shù)執(zhí)行時(shí),預(yù)編譯已經(jīng)結(jié)束。五總結(jié)理解預(yù)編譯需要明白變量函數(shù)聲明和變量賦值。預(yù)編譯階段,只進(jìn)行變量函數(shù)聲明,不會(huì)進(jìn)行變量的初始化即變量賦值,所有變量的值都是變量賦值是在解釋執(zhí)行階段才進(jìn)行的。 一、JS的概念 JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級(jí)解釋型或即時(shí)編譯型的編程語(yǔ)言。 二、JS語(yǔ)言特點(diǎn) 2.1 單線程 (1)JavaScri...

    Aldous 評(píng)論0 收藏0
  • 關(guān)于javascript作用域和作用域鏈

    摘要:作用域的類別可以影響到變量的取值,分為詞法作用域靜態(tài)作用域和動(dòng)態(tài)作用域。而,采用的就是詞法作用域,或者叫靜態(tài)作用域。 關(guān)于javascript中的作用域和作用域鏈 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 前面的文章說(shuō)到, 執(zhí)行上下文的創(chuàng)建階段,主要有三個(gè)內(nèi)容: ? ? ? ? 1、創(chuàng)建變量對(duì)象;2、初始化作用域...

    lcodecorex 評(píng)論0 收藏0

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

0條評(píng)論

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