<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [JavaScript]ECMA-262-3 深入解析.第一章.執(zhí)行上下文

      這篇文章我們主要探討ECMAScript執(zhí)行上下文和相關(guān)的ECMAScript可執(zhí)行代碼。

        每次當(dāng)控制器轉(zhuǎn)到ECMAScript可執(zhí)行代碼的時候,即會進(jìn)入到一個執(zhí)行上下文

        執(zhí)行上下文(簡稱-EC)是一個抽象概念,ECMA-262標(biāo)準(zhǔn)用這個概念同可執(zhí)行代碼(executable code)概念進(jìn)行區(qū)分。

        標(biāo)準(zhǔn)規(guī)范沒有從技術(shù)實(shí)現(xiàn)的角度準(zhǔn)確定義EC的類型和結(jié)構(gòu);這應(yīng)該是具體實(shí)現(xiàn)ECMAScript引擎時要考慮的問題。

        活動的執(zhí)行上下文在邏輯上組成一個堆棧。堆棧底部永遠(yuǎn)都是全局上下文(global context),堆棧頂部是當(dāng)前(活動的)執(zhí)行上下文。堆棧在EC類型的變量(various kingds of EC)被推入或彈出的同時被修改。

        可執(zhí)行代碼的概念與抽象的執(zhí)行上下文的概念是相對的。在某些時刻,可執(zhí)行代碼與執(zhí)行上下文是等價的。

        例如,我們可以定義一個數(shù)組來模擬執(zhí)行上下文堆棧:

        ECStack = [];
        

        每次進(jìn)入函數(shù) (即使函數(shù)被遞歸調(diào)用或作為構(gòu)造函數(shù)) 的時候或者內(nèi)置的eval函數(shù)工作的時候,這個堆棧都會被推入。

        這種類型的代碼是在"程序"級處理的:例如加載外部的js文件或者本地的在<script></script>標(biāo)簽內(nèi)的代碼。全局代碼不包括任何函數(shù)體內(nèi)的代碼。

        在初始化(程序啟動)階段,ECStack是這樣的:

        ECStack = [
          globalContext
        ];
        

        當(dāng)進(jìn)入函數(shù)代碼(所有類型的函數(shù)),ECStack被推入新元素。要注意的是,具體的函數(shù)代碼不包括內(nèi)部函數(shù)(inner functions)代碼。如下所示,我們使函數(shù)自己調(diào)自己的方式遞歸一次:

        (function  foo(bar) {
          if (bar) {
            return;
          }
          foo(true);
        })();
        

        那么,ECStack以如下方式被改變:

        // first activation of foo
        ECStack = [
          <foo> functionContext
          globalContext
        ];
         
        // recursive activation of foo
        ECStack = [
          <foo> functionContext – recursively
          <foo> functionContext
          globalContext
        ];
        

        每次返回存在的當(dāng)前執(zhí)行上下文和ECStack彈出相應(yīng)的執(zhí)行上下文的時候,棧指針會自動移動位置,這是一個典型的堆棧實(shí)現(xiàn)方式。一個被拋出但是沒有被截獲的異常,同樣存在一個或多個執(zhí)行上下文。當(dāng)相關(guān)段代碼執(zhí)行完以后,直到整個應(yīng)用程序結(jié)束,ECStack都只包括全局上下文(global context)。

         eval 代碼有點(diǎn)兒意思。它有一個概念: 調(diào)用上下文(calling context), 這是一個當(dāng)eval函數(shù)被調(diào)用的時候產(chǎn)生的上下文。eval(變量或函數(shù)聲明)活動會影響調(diào)用上下文(calling context)

        eval('var x = 10');
         
        (function foo() {
          eval('var y = 20');
        })();
         
        alert(x); // 10
        alert(y); // "y" is not defined
        

        ECStack的變化過程:

        ECStack = [
          globalContext
        ];
         
        // eval('var x = 10');
        ECStack.push(
          evalContext,
          callingContext: globalContext
        );
         
        // eval exited context
        ECStack.pop();
         
        // foo funciton call
        ECStack.push(<foo> functionContext);
         
        // eval('var y = 20');
        ECStack.push(
          evalContext,
          callingContext: <foo> functionContext
        );
         
        // return from eval
        ECStack.pop();
         
        // return from foo
        ECStack.pop();
        

        看到了吧,這是一個非常普通的邏輯調(diào)用堆棧

        在版本號1.7以上的SpiderMonkey(內(nèi)置于Firefox,Thunderbird)的實(shí)現(xiàn)中,可以把調(diào)用上下文作為第二個參數(shù)傳遞給eval。那么,如果這個上下文存在,就有可能影響“私有”(類似以private關(guān)鍵字命名的變量一樣)變量。

        function foo() {
          var x = 1;
          return function () { alert(x); };
        };
         
        var bar = foo();
         
        bar(); // 1
         
        eval('x = 2', bar); // pass context, influence on internal var "x"
         
        bar(); // 2
        

        這篇文章的內(nèi)容是未來分析其他跟執(zhí)行上下文相關(guān)的主題(例如變量對象,作用域鏈,等等)的最起碼的理論基礎(chǔ),這些主題將在后續(xù)章節(jié)中講到。

        這篇文章的內(nèi)容在ECMA-262-3 標(biāo)準(zhǔn)規(guī)范中對應(yīng)的章節(jié)— 10. Execution Contexts.

         

        英文地址 : ECMA-262-3 in detail. Chapter 1. Execution Contexts
        中文地址 : http://www.rzrgm.cn/justinw/archive/2010/04/16/1713086.html

        posted @ 2010-04-16 00:20  Justin  閱讀(12810)  評論(26)    收藏  舉報
        主站蜘蛛池模板: 午夜夜福利一区二区三区| 少妇人妻av无码专区| 国产av国片精品一区二区| av色蜜桃一区二区三区| 久久精品国产99久久久古代| 国产精品美女www爽爽爽视频 | 99国产精品永久免费视频| 国产成人亚洲欧美二区综合| 欧美成人免费全部| 国产欧美亚洲精品a第一页| 91精品国产综合蜜臀蜜臀| 天堂V亚洲国产V第一次| 久久99亚洲网美利坚合众国| 久久国产自偷自偷免费一区| 九九热精品视频免费在线| 国产色无码专区在线观看| 一本一道av无码中文字幕麻豆| 国产成人精品视频网站| 欧洲一区二区中文字幕| 中年国产丰满熟女乱子正在播放| 欧美xxxxhd高清| 视频一区视频二区视频三| 性欧美VIDEOFREE高清大喷水| 97人人模人人爽人人喊网| 国产精品日韩av一区二区| 一区二区三区国产不卡| 一本大道卡一卡二卡三乱码全集资源| 久久男人av资源站| 国产粉嫩一区二区三区av| 亚洲丰满熟女一区二区v| 玩弄漂亮少妇高潮白浆| 亚洲国产成人精品区综合| 欧美成本人视频免费播放| 色九月亚洲综合网| 日韩人妻中文字幕精品| 午夜福利伦伦电影理论片在线观看| 色婷婷五月综合久久| 亚洲中文字幕综合网在线| 在线看国产精品自拍内射| 男女性高爱潮免费网站| 亚洲精品一区二区三区大|