摘要:變量提升在中,通過聲明的變量,無論在何處申明,都會被視為聲明于所在函數(shù)的頂部如果不在函數(shù)內(nèi),則視為全局作用域頂部。通常建議變量申明優(yōu)先使用,然后再使用函數(shù)提升函數(shù)聲明會被提升到當(dāng)前作用域的最前面。
變量提升
在js中,通過var聲明的變量,無論在何處申明,都會被視為聲明于所在函數(shù)的頂部(如果不在函數(shù)內(nèi),則視為全局作用域頂部)。申明會提升,初始化不會提升。
例如:當(dāng)我們多帶帶執(zhí)行console.log(a)時,代碼會產(chǎn)生異常,因為a沒有定義。
但是在后面加上var a = 123,執(zhí)行結(jié)果輸出undefined
js執(zhí)行分兩個步驟:
編譯(詞法解釋/預(yù)解釋)
執(zhí)行
這里起作用的就是變量提升,編譯后的代碼相當(dāng)于
為什么輸出的不是123呢?因為初始化不會提升,所以a = "123" 不會提升至頂部。
注意的是,這里的聲明都是通過var申明的。使用let或const聲明的變量,在達到聲明處之前都是無法訪問的,試圖訪問會導(dǎo)致一個引用錯誤。
let與 const必需先申明再引用,并且只會作用于當(dāng)前代碼塊內(nèi)部(函數(shù)內(nèi)部、大括號內(nèi)部、for循環(huán)內(nèi)部)。通常建議變量申明優(yōu)先使用const,然后再使用let
function函數(shù)聲明會被提升到當(dāng)前作用域 的最前面。例如,在下面例子中test函數(shù)被提升至頂部:
但對于通過表達式申明的函數(shù)不會提升,如下:
test變量提升了,但初始化不會提升。
資料:《深入理解ES6》第一章
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/101965.html
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
閱讀 3469·2021-09-22 15:01
閱讀 590·2019-08-30 11:11
閱讀 1040·2019-08-29 16:17
閱讀 1265·2019-08-29 12:23
閱讀 2081·2019-08-26 11:48
閱讀 3235·2019-08-26 11:48
閱讀 1481·2019-08-26 10:33
閱讀 2003·2019-08-26 10:30