2、JavaScript進階之詞法分析

來源:互聯網
上載者:User

2、JavaScript進階之詞法分析

JavaScript代碼自上而下執行,但是在js代碼執行前,會首先進行詞法分析,所以事實上,js運行要分為詞法分析和執行兩個階段。

詞法分析

詞法分析主要分為3步:
第1步:分析形參
第2步:分析變數聲明
第3步:分析函式宣告

如果存在函數嵌套,則從外往內進行詞法分析


具體步驟:
0:在函數執行的一瞬間,生產 Active Object(使用中的物件),下面簡稱AO
1:
1.1 函式宣告的形參,形成AO的屬性,預設值是undefined,
1.2 接收形參,給剛剛形成AO的屬性的形參賦值
2:分析var聲明變數!如 var age;(變數的值是在運行時期決定)
2.1 如果AO上還沒有age屬性,則給AO添加age屬性,預設值是undefined
2.2 如果AO上已經有age屬性,則不做任何操作。
3:分析函式宣告!如 function foot(){}
3.1 如果AO上沒有foot屬性,則把函數賦給AO.foot屬性
3.2 如果AO上有foot屬性,則會直接覆蓋,把函數賦給AO.foot屬性

代碼示範與分析:

  function a(b){       alert(b);       function b(){           alert(b);       }       b();   }   a(1);
這是個常見的JavaScript面試題,如果不懂JavaScript的詞法分析,根本看不懂,下面就按照JavaScript的詞法步驟進行分析,前面說過JavaScript自上而下執行,但是先進行詞法分析後執行代碼

分析過程:
0、形成使用中的物件AO={}
1、分析形參,--> AO={b:undefined}; 分析傳參,--> AO={b:1}
2、分析變數聲明var,沒有
3、分析函式宣告,AO.b=function(){alert(b);},執行覆蓋操作

執行過程:
alert(b);//function
b(); // 執行function b...alert(b),在函數b的範圍內部找不到b,根據範圍鏈原理(見上一篇http://blog.csdn.net/guixuecheng/article/details/43670323)往外層尋找,找到b就是函數自己,列印出function ...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.