瀏覽器是怎樣解析JS的


瀏覽器運行整個頁面文檔時(html文件),遇到<script>標簽,立刻喚醒JavaScript解析器來解析js代碼。

 

JavaScript解析器工作步驟:

1、預解析階段

這個階段,JS解析器從上到下搜索代碼,只去尋找一些關鍵字如var,function這些內容,找到這些內容后,相關的所有的變量都會被先賦值為undefined(這也就是變量提升為啥值會是undefined的具體原因),所有的函數變量都為函數塊。

 

如果這個階段遇到變量重名的問題,有以下規則

變量和函數聲明重名了,只留下函數;

函數和函數重名了,根據代碼的上下文順序,留下最后一個

 

2、逐行解讀代碼。

這個階段的變量賦值表達式可以修改上一步預解析的值。

如果有多個表達式對相同的變量多次賦值,那么除過函數聲明不能修改上次的賦值,變量賦值和函數表達式都可以修改這個變量的值

比如

alert(a);         //function a(){alert(1)}


var a = 0;


alert(a);         //0


var a = 1;


alert(a);         //1


var a = function(){


alert(0);


}


alert(a);         //function(){alert(0)};


function a(){alert(1)}//因為是函數聲明,不會改變a的值


alert(a);         //function(){alert(0);}

 

在預解析階段,a預解析的順序為undefined(var)->undefined(var)->undefined(var )->function(){alert(1)};(function);

所以才有上面的運行結果。


免責聲明!

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



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