Javascript的“上下文”(context)


一:JavaScript中的“上下文“指的是什么
百科中這樣定義:
上下文是從英文context翻譯過來,指的是一種環境
在軟件工程中,上下文是一種屬性的有序序列,它們為駐留在環境內的對象定義環境。
在對象的激活過程中創建上下文,對象被配置為要求某些自動服務,如同步、事務、實時激活、安全性等等。又比如計算機技術中,相對於進程而言,上下文就是進程執行時的環境。
具體來說就是各個變量和數據,包括所有的寄存器變量、進程打開的文件、內存信息等。
 

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

上下文的原意是content,而作用域的原意是scope。
 
scope指的是 函數被調用的時候, 各個變量的作用區域
content指的是 函數被調用的時候, 查看
this指向哪個object, 那么那個object 就是當前的 "上下文"。
 
反正我的理解就是:當前執行環境的作用域,因為“上下文”如果離開了執行環境就沒有啥實際意義了。
 
二:JavaScript的兩個階段都干了啥
(1)預“編譯”階段(一定要注意,這個編譯,不是編譯成機器碼的編譯):
          瀏覽器的JavaScript引擎“解析”JavaScript代碼。
          建立arguments對象(隱藏對象,不可見),函數,參數,變量
          建立作用域鏈
          確定this的值(或者說指向)
 
 (2)代碼執行階段
            瀏覽器的JavaScript引擎一步步執行代碼段,從上至下。
            給變量賦值,確定函數的引用。
 
三:具體代碼分析
function foo(z){
    var a="Hi";
    var b=function(){
    
    };
    function c(){
        
    }
}
 
foo("zqz")
 
預“編譯”階段:
    z—>undefined
    a—>undefined;
    b—>undefined;
    c—>function (){}
 
執行階段:
    z—>"zqz";
    a—>"Hi";
    b—>function (){};
    c—>function c(){}
 
    
這里面還有個問題:構建執行環境作用域時,arguments對象(隱藏對象,不可見),函數,參數,變量的聲明與構建有先后順序。
arguments對象(隱藏對象,不可見)—>函數—>參數—>變量
 
function foo(z){
    console.log(a);
    console.log(b);

    var a = 'Hi';
    var b = function() {

            };

    function a() {

    }
    console.log(a);
    console.log(b);
}

foo("zqz")
結果:function a(){}    
            undefined    //是變量聲明
            Hi
            function b(){}
按順序走一遍:arguments—>function a(){}—>z—>var a='Hi';var b=function(){}
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM