js的預解析


1,js是順序執行的,下面這個大家肯定沒有異議 

 
         
test();// 哈哈
function test(){
alert(
"哈哈");
}
但是在C語言中,這樣就不行了,C語言要求函數必須先聲明后調用,那是什么原因讓js有如此能力先調用而后聲明了?ok,這說明js肯定是在調用函數之前就將函數放入內存中了,這種簡單的機制就是我們今天要說的---js預解析

2,變量的預解析,看如下代碼
alert(a);//undefined

var a="test";

和函數聲明一樣,變量的聲明也會在一開始就被放入內存中了,但是並沒有賦值,所以在它賦值之前,它的值就是undefined;

3,變量和函數重名,看如下代碼

alert(a); //function(){ return  "function"} 

var a="var";

function a(){ return "function" }
alert(a); // var
 

這個就說明了,重名時,函數名優先級高於變量名

 4,js的預解析是在程序進入一個新的環境時,把該環境里的變量或函數預解析到它們能調用的環境中。即每一次預解析的單位是一個執行環境。代碼如下

function a(){
     var b="function"
}

alert(b);//報錯   b is not  defined

 此外,如果預解析不會跨<script>去解析,如下:

<script type="text/javascript">
alert(b);//報錯
</script>

<script type="text/javascript">
var b=1;
</script>

 

 

 

 


免責聲明!

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



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