天天看點

Javascript的“上下文”(context)

一:javascript中的“上下文“指的是什麼

百科中這樣定義:

上下文是從英文context翻譯過來,指的是一種環境。

在軟體工程中,上下文是一種屬性的有序序列,它們為駐留在環境内的對象定義環境。

在對象的激活過程中建立上下文,對象被配置為要求某些自動服務,如同步、事務、實時激活、安全性等等。又比如計算機技術中,相對于程序而言,上下文就是程序執行時的環境。

具體來說就是各個變量和資料,包括所有的寄存器變量、程序打開的檔案、記憶體資訊等。

javascript的執行上下文的了解是一種大概模糊的了解(譯者)。

上下文的原意是content,而作用域的原意是scope。

scope指的是 函數被調用的時候, 各個變量的作用區域

content指的是 函數被調用的時候, 檢視this指向哪個object, 那麼那個<code>object</code> 就是目前的 "上下文"。

反正我的了解就是:目前執行環境的作用域,因為“上下文”如果離開了執行環境就沒有啥實際意義了。

二:javascript的兩個階段都幹了啥

(1)預“編譯”階段(一定要注意,這個編譯,不是編譯成機器碼的編譯):

          浏覽器的javascript引擎“解析”javascript代碼。

          建立arguments對象(隐藏對象,不可見),函數,參數,變量

          建立作用域鍊

          确定this的值(或者說指向)

 (2)代碼執行階段

            浏覽器的javascript引擎一步步執行代碼段,從上至下。

            給變量指派,确定函數的引用。

三:具體代碼分析

Javascript的“上下文”(context)
Javascript的“上下文”(context)

預“編譯”階段:

    z—&gt;undefined

    a—&gt;undefined;

    b—&gt;undefined;

    c—&gt;function (){}

執行階段:

    z—&gt;"zqz";

    a—&gt;"hi";

    b—&gt;function (){};

    c—&gt;function c(){}

這裡面還有個問題:建構執行環境作用域時,arguments對象(隐藏對象,不可見),函數,參數,變量的聲明與建構有先後順序。

arguments對象(隐藏對象,不可見)—&gt;函數—&gt;參數—&gt;變量

Javascript的“上下文”(context)
Javascript的“上下文”(context)

結果:function a(){}    

            undefined    //是變量聲明

            hi

            function b(){}

按順序走一遍:arguments—&gt;function a(){}—&gt;z—&gt;var a='hi';var b=function(){}

可以結合這篇文章看:

轉載:http://www.cnblogs.com/zqzjs/p/5064807.html

繼續閱讀