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

資訊專欄INFORMATION COLUMN

js變量提升與函數(shù)提升的機制

fasss / 968人閱讀

摘要:所謂變量提升,提升就是為了事先聲明變量。變量提升之后,但其賦值還是留在原本的位置等運行到了之后動態(tài)賦值,而函數(shù)提升之后直接相當于在代碼里抽空了。搞明白這個例子也就搞懂了作用域中變量和函數(shù)是怎么提升的。

問題

在這個例子中它應該輸出什么?輸出的結果是6。

這個例子中它又該輸出什么?輸出的結果是a(),也就是輸出了函數(shù)指針a。

這雖然是個變量和函數(shù)提升的問題,但是這兩者到底是怎么提升的?

js是怎么創(chuàng)建變量的
var a=1;
var b=2;

這是不是聲明了變量就立馬接著給聲明的變量賦值了?

js解析這個代碼時,它實際上是按照如下方式解析的

var a;
var b;
a=1;
b=2;

也就是js會先把所有變量都聲明好了之后,然后才進行賦值,并不是聲明一個變量就賦值,再聲明一個再賦值。js所謂變量提升,提升就是為了事先聲明變量。

上圖中左邊的例子,js解析時候是按照按照右邊的代碼解析的。js會把所有變量都集中提升到作用域頂部事先聲明好,但是它賦值就就并不是像變量聲明那樣集中著一個個挨著賦值。原本書寫賦值時寫在哪里,那么js解析運行到那一行之后才會進行賦值,還沒有運行到的就不會事先賦值。也就是變量會事先聲明,但是變量不會事先賦值。

函數(shù)和變量都提升時,誰提到前面誰提到后面

在作用域中,不管變量和函數(shù)寫在什么位置,所有變量會被整體提升到作用域頂部,所有函數(shù)也會被整體提升到作用域頂部,但是函數(shù)整體在變量整體的后面。

從這個例子中可以看到,變量和函數(shù)都整體提升后,函數(shù)整體在變量的后面。變量提升之后,但其賦值還是留在原本的位置等js運行到了之后動態(tài)賦值,而函數(shù)提升之后直接相當于在代碼里抽空了。

在這個更復雜一點的例子中,變量和函數(shù)提升后,js實際上就把它轉變?yōu)榱擞疫叺拇a在運行。

搞明白這個例子也就搞懂了作用域中變量和函數(shù)是怎么提升的。

結語

回到開頭的兩個問題

它們各自被js轉換后如上

一個思考題,這個例子該輸出什么?

“提升”的本質就是為了事先聲明變量和函數(shù),當然函數(shù)只有聲明式函數(shù)才會被提升,字面量函數(shù)不會被提升。這種提升就是存在于作用域中,包括全局作用域、函數(shù)作用域(閉包形成的作用域也是個函數(shù)作用域),總之都是在作用域中聲明變量和函數(shù)時,會提升到作用域頂部,進行事先聲明。

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

轉載請注明本文地址:http://systransis.cn/yun/88164.html

相關文章

  • Js基礎知識(三) - 作用域閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應的序號? 看到上述問題,如果你能看出來這個問題實質上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    lemanli 評論0 收藏0
  • Js基礎知識(三) - 作用域閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應的序號? 看到上述問題,如果你能看出來這個問題實質上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    XFLY 評論0 收藏0
  • Js基礎知識(三) - 作用域閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應的序號? 看到上述問題,如果你能看出來這個問題實質上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    tanglijun 評論0 收藏0
  • Js基礎知識(三) - 作用域閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標簽,點擊每個按鈕時打印按鈕對應的序號? 看到上述問題,如果你能看出來這個問題實質上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    lmxdawn 評論0 收藏0

發(fā)表評論

0條評論

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