JS函數的詞法分析和執行過程

來源:互聯網
上載者:User

標籤:style   java   strong   資料   width   cti   

調用JS函數包括兩部分在執行:1.詞法分析 2.執行語句  
    例1:*/

          function test(x,y){ 
                 function x(){
                     alert(x);
                }
                x();
                alert(x);
          }
          test(100);

    詞法分析:
    1.函數執行時候,產生Active Object對象
    2.AO.x=undefined AO.y=undefined   (形參的值都將為undefined)
    3.test(100) 只給一個實參 那麼AO.x=100 AO.y值不變
    4.遇到function x 那麼AO.x=function x(){alert(x)} (可以理解為函式宣告優先順序大於上面的"賦值方式")
    

    執行:
    1
        1.1  x() 執行函數x 同樣也分為兩部分:詞法分析和執行
        1.2  由於在x的AO對象中沒有x 那麼它將到沿著範圍鏈到上一層找 得到test的AO.x的值並輸出
    2 alert(x) 在當前對象AO對象中得到x的值


    最後得到輸出結果一樣

    例2:

       function test(x,y){ 
            var x=15;
                 function x(){
                     alert(x);
                }
                x();
                alert(x);
          }
          test(100);
    //result  TypeError: x is not a function x();

    
    思路按照上一個例子中的解釋 不過在執行過程中 var x=15; 重新覆蓋了x的值,改變了資料類型,自然x()不是函數了

    /*例3:     

          function a(){     
                    alert(b);   //函數b的函數體的所有內容
                    b();
                     function b(){
                        c()
                        function c(){
                            d();
                            function d(){
                              alert(a); //函數a的函數體的所有內容
                              
                            }
                        }
                     }
                }          
                a();

               
              詞法分析:
                     1.函數調用時候 產生Active Object對象(嵌套調用時候各自產生AO對象)
                     2.以a為例 它詞法分析過程中 AO.b=函數b函數體內的所有內容 其它流程都一樣
              執行過程:
                    1.alert(b)  得到屬於a的AO對象中B的值(即函數B的函數體內容)
                    2.alert(a)  由於所在的d的AO對象中找不到a的值 只能在範圍鏈沿上尋找(就近找值,即尋找每層函數的AO對象中是否含有需要尋找的變數)

              

複製去Google翻譯翻譯結果 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.