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

資訊專欄INFORMATION COLUMN

JS變量提升的一些想法

kbyyd24 / 2791人閱讀

摘要:函數(shù)聲明被提升時(shí),聲明和賦值兩個(gè)步驟都會(huì)被提升,而普通變量卻只能提升聲明步驟,而不能提升賦值步驟。變量被提升過后,先對(duì)提升上來的所有對(duì)象統(tǒng)一執(zhí)行一遍聲明步驟,然后再對(duì)變量執(zhí)行一次賦值步驟。

專欄剛剛開通, 先把自己以前寫的一些沒人看的答案搬運(yùn)過來填補(bǔ)一下空白.

變量的問題,莫過于聲明賦值兩個(gè)步驟,而這兩個(gè)步驟是分開的。

函數(shù)聲明被提升時(shí),聲明和賦值兩個(gè)步驟都會(huì)被提升,

而普通變量卻只能提升聲明步驟,而不能提升賦值步驟。

變量被提升過后,先對(duì)提升上來的所有對(duì)象統(tǒng)一執(zhí)行一遍聲明步驟,

然后再對(duì)變量執(zhí)行一次賦值步驟。

而執(zhí)行賦值步驟時(shí),會(huì)優(yōu)先執(zhí)行函數(shù)變量的賦值步驟,再執(zhí)行普通變量的賦值步驟。

當(dāng)你明白這三點(diǎn)后,一切都豁然開朗了。

首先來看一個(gè)DEMO:

(function(){
        
        function a(){};
        var a;
        alert(typeof a); //function
    })();

先提升兩個(gè)a,然后執(zhí)行函數(shù)的賦值步驟,a沒有被賦值,故結(jié)果為function

再看一個(gè):

 (function(){
        alert(typeof a);//function
        function a(){};
        var a = 1;
         
    })();

先提升兩個(gè)a,再執(zhí)行函數(shù)的賦值步驟,

因?yàn)樵赼lert語句執(zhí)行以前,還未執(zhí)行a = 1的賦值步驟,函數(shù)不會(huì)被覆蓋,故為function

來個(gè)最有說服力的:

(function(){ 
            var a = 1;
            function a(){};
            alert(typeof a); //number
        })();

在alert語句執(zhí)行之前,a = 1步驟和函數(shù)賦值步驟均已執(zhí)行,

而且函數(shù)還在a = 1賦值語句之后,但是仍然輸出number,

就是因?yàn)楹瘮?shù)的賦值步驟會(huì)先于a = 1的賦值步驟,函數(shù)被覆蓋,故輸出number。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80691.html

相關(guān)文章

  • 詳解js變量聲明提升

    摘要:換句話說,在代碼執(zhí)行之前,會(huì)對(duì)作用域鏈中所有變量和函數(shù)聲明先處理完先。總結(jié)一句話就是只有聲明被提升,而賦值或其他運(yùn)算會(huì)留在原地。為其聲明變量隱性劫持到所在區(qū)域中。 之前一直覺會(huì)認(rèn)為javascript代碼執(zhí)行是由上到下一行行執(zhí)行的。自從看了《你不知道的JS》后發(fā)現(xiàn)這個(gè)觀點(diǎn)并不完全正確。先來給大家舉一個(gè)書本上的的例子: var a=hello world; var a; co...

    NSFish 評(píng)論0 收藏0
  • Javascript元編程之Annotation

    摘要:事實(shí)上,實(shí)現(xiàn)元編程有多種方式,從語言本身來講,可以分為兩類增強(qiáng)型與新的語法實(shí)現(xiàn),前者的代表是反射,后者的代表為。在第二部分,我們嘗試在語言基礎(chǔ)上增加原生的元編程能力并介紹了該思路的實(shí)現(xiàn)框架。 語言的自由度 自由度這個(gè)概念在不同領(lǐng)域有不同的定義,我們借鑒數(shù)學(xué)中構(gòu)成一個(gè)空間的維數(shù)來表達(dá)其自由度的做法,在此指的是:解決同一個(gè)問題彼此不相關(guān)的設(shè)計(jì)方法學(xué)數(shù)量。 例如,解決一個(gè)比如商品打折的問題,...

    SegmentFault 評(píng)論0 收藏0
  • Javascript元編程之Annotation

    摘要:事實(shí)上,實(shí)現(xiàn)元編程有多種方式,從語言本身來講,可以分為兩類增強(qiáng)型與新的語法實(shí)現(xiàn),前者的代表是反射,后者的代表為。在第二部分,我們嘗試在語言基礎(chǔ)上增加原生的元編程能力并介紹了該思路的實(shí)現(xiàn)框架。 語言的自由度 自由度這個(gè)概念在不同領(lǐng)域有不同的定義,我們借鑒數(shù)學(xué)中構(gòu)成一個(gè)空間的維數(shù)來表達(dá)其自由度的做法,在此指的是:解決同一個(gè)問題彼此不相關(guān)的設(shè)計(jì)方法學(xué)數(shù)量。 例如,解決一個(gè)比如商品打折的問題,...

    lifesimple 評(píng)論0 收藏0
  • javascript聲明提升

    摘要:但是碰到聲明提升,這種想法就會(huì)被打破。聲明一個(gè)函數(shù)進(jìn)行相應(yīng)的操作,會(huì)得到函數(shù)聲明提升的結(jié)果。由此可以發(fā)現(xiàn)變量和函數(shù)的聲明都會(huì)被提升在其他代碼的前面執(zhí)行。一個(gè)普通塊內(nèi)部的函數(shù)聲明通常會(huì)被提升到所在的作用域的頂部。的創(chuàng)建初始化和賦值均會(huì)被提升。 Javascript聲明提升 在分析聲明提升之前,我認(rèn)為有必要知道的兩點(diǎn): 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為L(zhǎng)HS和RHS兩...

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

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

0條評(píng)論

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