国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript的變量聲明

zhongmeizhi / 1145人閱讀

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

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

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

歡迎star

var 聲明的提升

var 不管在哪里聲明的,都會被當成在當前作用域頂部聲明的。

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

被聲明的變量還是在原來的地方,真正被賦值

塊級聲明

塊級聲明用于聲明在指定塊的作用域之外無法訪問的變量。

在同一作用域內(nèi),相同的標識符只能有一個

當執(zhí)行流離開這個塊級,那么這些變量會被銷毀

塊級作用域中的變量會屏蔽全局作用域中的相同標識符的變量(即取的是塊級作用域中的值)

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

不會變量提升

臨時死區(qū)

let 和 const 是不會變量提升的,所以在聲明變量之前,是用typeof是會報錯的。

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

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

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

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

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

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

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

用var來定義全局變量,可以用在瀏覽器的跨frame或跨window訪問代碼。

最佳實踐

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/109461.html

相關(guān)文章

  • 理解 Javascript變量作用域

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

    Rocture 評論0 收藏0
  • JavaScript 變量聲明提升

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

    fireflow 評論0 收藏0
  • 【譯】理解JavaScript:作用域

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

    betacat 評論0 收藏0
  • JavaScript預編譯過程分析

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

    graf 評論0 收藏0
  • JavaScript-預編譯

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

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

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

    lcodecorex 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<