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

資訊專欄INFORMATION COLUMN

20170525-執行環境、作用域鏈、作用域

gnehc / 973人閱讀

摘要:當執行流進入一個函數時,函數的環境就會被推入一個環境棧中。在函數執行完后,棧將其環境彈出,把控制權返回給之前的執行環境。執行環境可以分為創建執行銷毀三個階段。在這個階段,作用域鏈會被初始化,的值也會被最終確定。

執行環境

執行環境中定義了變量和函數有權訪問的其他數據,決定了他們各自的行為。

當JavaScript解釋器初始化執行代碼時,它首先默認進入全局執行環境,從此刻開始,函數的每次調用都會創建一個新的執行環境。

每個函數都有自己的執行環境。當執行流進入一個函數時,函數的環境就會被推入一個環境棧中(execution stack)。在函數執行完后,棧將其環境彈出,把控制權返回給之前的執行環境。ECMAScript程序中的執行流正是由這個便利的機制控制著。

執行環境可以分為創建、執行、銷毀三個階段。在創建階段,解析器首先會創建一個變量對象(variable object),它由定義在執行環境中的變量、函數聲明、和參數組成。在這個階段,作用域鏈會被初始化,this的值也會被最終確定。在執行階段,代碼被解釋執行。 某個執行環境中的所有代碼執行完畢后,該環境被銷毀,保存在其中的所有變量和函數定義也隨之銷毀

作用域鏈

當代碼在一個執行環境中執行時,會創建變量對象的一個作用域鏈

作用域鏈的作用是:保證對 當前執行環境權訪問的所有變量和函數的有序訪問

作用域的前端始終是當前執行的代碼所在環境的變量對象

作用域鏈的最后始終是全局執行環境的變量對象

作用域鏈里只包含上一級的變量對象,但并不包括下一級的變量對象

標識符解析的是沿著作用域鏈一級一級地搜索標識符的過程,搜索始終從作用域鏈的前端開始(當前環境的變量對象),逐級向后查找(上級環境的變量對象),直至找到標識符為止

內部環境可以通過作用域鏈訪問所有外部環境,但是外部環境無法訪問內部環境中的任何變量和函數

延長作用域鏈:

在作用域鏈的前端(自己的變量對象之前)臨時增加一個變量對象,該變量對象會在(這段)代碼執行后被移除

try-catch語句中的catch塊

with語句:

function builder(){
    var str = "advd"
    // 在作用域鏈的前端臨時增加了一個變量對象,這樣在當前執行環境中就可以訪問loaction的屬性和方法了
    with(location){
        var url = href + str
    }
    // 當with代碼執行后,作用域鏈中的臨時變量對象被移除,此時無法訪問href
    console.log(href) //  Uncaught ReferenceError: href is not defined
    return url
}
作用域

我認為作用域鏈是對變量對象/執行環境而言的,當執行環境中出現一個變量時,應該按照怎樣的搜索方式(沿著作用域鏈)去找到這個變量

作用域是對于變量而言的,指明了這個變量在哪些地方可以被訪問到,例如某一變量處于全局作用域中,則該變量可以在代碼的任何地方被訪問到

全局作用域:

最外層函數和最外層函數外面定義的變量擁有全局作用域

所有 未定義 (要理解這個未定義的含義) 直接賦值的變量自動聲明為擁有全局作用域

window對象的屬性擁有全局作用域

函數作用域:

在函數中定義的變量

給函數傳遞的參數

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83164.html

相關文章

  • 還是不明白JavaScript - 執行環境作用作用、閉包嗎?

    摘要:所以,全局執行環境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經對執行環境執行環境對象變量對象作用域作用域鏈的理解已經他們之間的關系有了一個較清晰的認識。 JavaScript中的執行環境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關的問題在面試中高頻出現。之前我也看過...

    jlanglang 評論0 收藏0
  • [學習筆記] JavaScript 作用

    摘要:全局執行環境的變量對象始終是作用域鏈中的最后一個變量對象。綜上,每個函數對應一個執行環境,每個執行環境對應一個變量對象,而多個變量對象構成了作用域鏈,如果當前執行環境是函數,那么其活動對象在作用域鏈的前端。 1.幾個概念 先說幾個概念:函數、執行環境、變量對象、作用域鏈、活動對象。這幾個東東之間有什么關系呢,往下看~ 函數 函數大家都知道,我想說的是,js中,在函數內部有兩個特殊...

    ?xiaoxiao, 評論0 收藏0
  • 形象化模擬作用,深入理解js作用、閉包

    摘要:至此作用域鏈創建完畢。好了,通過深入理解作用域鏈,我們能跟好的理解的運行機制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對我們理解js這們語言。這次想深入的聊下關于js執行的內部機制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當一個函數執行時,js引擎做了哪些事情--那些我們看不見的動作。 關鍵詞: 執行環境 作用域 作用域鏈 變...

    txgcwm 評論0 收藏0
  • 關于js閉包

    摘要:在作用域鏈中,外部函數的活動對象始終處于第二位,外部函數的外部函數的活動對象處于第三位,直到作用域鏈終點即全局執行環境。更為重要的是函數在執行完畢后,其他活動對象也不會被銷毀,因為匿名函數的作用域鏈仍然在引用這個活動對象。 原文鏈接----請點這里 ??閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的常見方式,就是在一個函數內部創建另一個函數。 ??之所以一個內部的函數可以...

    livem 評論0 收藏0
  • JS 作用

    摘要:首先,在創建函數時,作用域鏈內就會先填入對象,圖片只例舉了全部變量中的一部分。然后,解釋器進入函數的執行環境,同樣的,首先填入父級的作用域鏈,就是的,包括了對象活動對象。之后再把的活動對象填入到作用域鏈最頂部,這就是的作用域鏈了。 之前學習JS函數部分時,提到了作用域這一節,但是因為使用材料書不同,今天在讀博客的時候發現其實還有一個知識點即作用域鏈,所以來寫一些個人理解和認識加深記憶。...

    darry 評論0 收藏0

發表評論

0條評論

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