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

資訊專欄INFORMATION COLUMN

個人總結(jié):關(guān)于變量提升和函數(shù)提升的理解

antz / 1878人閱讀

摘要:變量提升變量的聲明寫在可以在使用變量之后函數(shù)提升函數(shù)可以先調(diào)用,后聲明上面先解釋了下我理解的這兩個概念的定義。參考前端基礎(chǔ)進(jìn)階三變量對象詳解關(guān)于變量提升的理解

變量提升:變量的聲明寫在可以在使用變量之后;
函數(shù)提升:函數(shù)可以先調(diào)用,后聲明;

上面先解釋了下我理解的這兩個概念的定義。要真正理解它們,最好從變量對象的角度出發(fā)。引出變量對象的概念,要先理解執(zhí)行上下文,也就是當(dāng)控制器執(zhí)行到可執(zhí)行代碼的時候,就會生成一個執(zhí)行上下文,也就是代碼的執(zhí)行環(huán)境,會產(chǎn)生一個作用域。這個執(zhí)行上下文的生命周期有兩個階段:創(chuàng)建階段代碼執(zhí)行階段

創(chuàng)建階段就會創(chuàng)建變量對象,創(chuàng)建的過程分三步:

1.建立arguments對象。檢查當(dāng)前上下文中的參數(shù),建立該對象下的屬性與屬性值
2.先檢查有沒有函數(shù)聲明(利用function關(guān)鍵字聲明的函數(shù),在變量對象中用函數(shù)名作為屬性名,屬性值是函數(shù)內(nèi)存地址
的引用。如果函數(shù)名的引用已經(jīng)存在,那么會被新的引用覆蓋)
3.再檢查變量聲明,每找到一個變量聲明,就在變量對象里用變量名作為屬性名,屬性值是undefined。如果變量名已經(jīng)存在,直接跳過,目的是防止把同名的函數(shù)被修改成undefined

執(zhí)行階段會將變量對象轉(zhuǎn)換為活動對象:

創(chuàng)建完成之后,就會開始執(zhí)行代碼,這個時候,會完成變量賦值,函數(shù)引用,以及執(zhí)行其他代碼。
(在變量對象創(chuàng)建過程中,其中的屬性不可訪問。只有在執(zhí)行階段轉(zhuǎn)為活動對象后,才可以訪問其中的內(nèi)容)

先來一個簡單的例子:

function foo(){
    a = 2;
    function a(){
        console.log("函數(shù)")
    }
    console.log(a); //2
    var a;
};
foo();

這個例子中,當(dāng)控制器遇到這段代碼時候,會形成一個執(zhí)行上下文。隨后進(jìn)入到執(zhí)行上下文的第一個生命周期:創(chuàng)建階段,此時,執(zhí)行創(chuàng)建變量對象的三個步驟。

由于沒有參數(shù)。直接進(jìn)入第二步。

首先檢查上下文中有沒有function關(guān)鍵字聲明的函數(shù),以a為屬性名,函數(shù)的引用為屬性值,添加到變量對象中。

再檢查函數(shù)聲明,發(fā)現(xiàn)了變量名a,但是,以a為屬性名的屬性值已經(jīng)存在,所以跳過。

接下來進(jìn)入第二個生命周期:代碼執(zhí)行

a被賦值為2,函數(shù)a未被調(diào)用。打印a等于2

函數(shù)提升也是一個道理,由于變量對象創(chuàng)建過程中會先檢查function關(guān)鍵字聲明的函數(shù),以該函數(shù)的函數(shù)名為屬性,值為函數(shù)地址的引用,添加進(jìn)變量對象中。

參考:前端基礎(chǔ)進(jìn)階(三):變量對象詳解 關(guān)于JavaScript變量提升的理解

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

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

相關(guān)文章

  • JavaScript函數(shù)

    摘要:函數(shù)面試考點比較密集參考阮一峰函數(shù)我的博客關(guān)于作用域變量提升函數(shù)提升的個人理解筆記函數(shù)的五種聲明方式具名函數(shù)聲明一個變量七種數(shù)據(jù)類型聲明一個函數(shù)是個特例不寫自動加上關(guān)于返回會在傳入的參數(shù)里首先調(diào)用方法但是當(dāng)打印到控制臺的時候沒有寫雙引號是瀏 JavaScript函數(shù) 面試考點比較密集參考阮一峰JavaScript函數(shù)我的博客:關(guān)于作用域,變量提升,函數(shù)提升的個人理解筆記 1.函數(shù)的五種...

    v1 評論0 收藏0
  • 一次阿里面試后對函數(shù)本質(zhì)理解

    摘要:函數(shù)使用函數(shù)的使用主要有兩種閉包閉包的本質(zhì)是對共享變量的操作,典型運用是觀察者模式備忘錄模式普通封裝,復(fù)用。參考阿里博客你可能不知道的事基礎(chǔ)篇總結(jié)要寫好一個項目需要兼容,性能,安全等。 一次阿里面試后對函數(shù)本質(zhì)的理解 寫在前面 環(huán)境:阿里的在線編程系統(tǒng)允許面試官在線考察面試者的編程能力. 考點:編程和理論. 編程:分為技術(shù)自驅(qū)力、異步操作、編程風(fēng)格(顆粒小)、變量作用域、DOM操作...

    liuyix 評論0 收藏0
  • 一次阿里面試后對函數(shù)本質(zhì)理解

    摘要:函數(shù)使用函數(shù)的使用主要有兩種閉包閉包的本質(zhì)是對共享變量的操作,典型運用是觀察者模式備忘錄模式普通封裝,復(fù)用。參考阿里博客你可能不知道的事基礎(chǔ)篇總結(jié)要寫好一個項目需要兼容,性能,安全等。 一次阿里面試后對函數(shù)本質(zhì)的理解 寫在前面 環(huán)境:阿里的在線編程系統(tǒng)允許面試官在線考察面試者的編程能力. 考點:編程和理論. 編程:分為技術(shù)自驅(qū)力、異步操作、編程風(fēng)格(顆粒小)、變量作用域、DOM操作...

    superw 評論0 收藏0
  • 一次阿里面試后對函數(shù)本質(zhì)理解

    摘要:函數(shù)使用函數(shù)的使用主要有兩種閉包閉包的本質(zhì)是對共享變量的操作,典型運用是觀察者模式備忘錄模式普通封裝,復(fù)用。參考阿里博客你可能不知道的事基礎(chǔ)篇總結(jié)要寫好一個項目需要兼容,性能,安全等。 一次阿里面試后對函數(shù)本質(zhì)的理解 寫在前面 環(huán)境:阿里的在線編程系統(tǒng)允許面試官在線考察面試者的編程能力. 考點:編程和理論. 編程:分為技術(shù)自驅(qū)力、異步操作、編程風(fēng)格(顆粒小)、變量作用域、DOM操作...

    jeyhan 評論0 收藏0
  • JS編譯之 LHS RHS(你不知道JavaScript 小記一)

    摘要:關(guān)于兩個專業(yè)術(shù)語的討論起自對你不知道的一書的閱讀學(xué)習(xí)。遇到,編譯器會詢問作用域是否已經(jīng)有一個該名稱的變量存在于同一個作用域的集合中。摘錄來自你不知道的。 JS 編譯之 LHS RHS 一、前言 最近和朋友聊技術(shù)的時候,聊到 LHS RHS,我竟然沒聽說過 沒聽說過。。。 于是成功引起了我的好奇心。 關(guān)于兩個專業(yè)術(shù)語的討論起自對《你不知道的JavaScript》一書的閱讀學(xué)習(xí)。 二、編譯...

    Cristic 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<