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>