代碼進行靜態分析,找聲明變量,函數,檢測語法是否符合規範函數
<script> // 1.function權重比var高 // 在var和function聲明同一個變量的時候函數會覆蓋var alert(a); // 結果爲 function a(){} var a = 0; function a(){}; // 2.靜態檢測語法是否符合規範 function b(){ return x + y = 1; // 執行前 = 號報錯 }; </script>
運行js代碼,執行期裏面有新的做用域,新的做用域就會被激活,重新開始編譯-執行,依次類推this
<script> console.log(a); // undefined fun(); // undefined var a = 10; function fun(){ console.log(a); } console.log(a); // 10 var x = 5; func(); function func(){ console.log(x); // undefined var x = 10; console.log(x); // 10 console.log(this.x) // 5 } console.log(x); // 5 /* 1.編譯 x function func(){} 2.執行期 func()自執行,產生新的做用域 1.編譯: var x; 2.執行期 x => undefined (本做用域裏的x,還未被賦值) x => 10; (本做用域裏的x,已經被賦值) this.x => 5 (自啓動函數,this指向window) 返回上一個做用域繼續執行-- console.log(x); (本做用域裏的x,被賦值) x = > 5 最後一行直接報錯,不能訪問內部變量 */ function m(){ var n = 1; console.log(n); } function m(){ var n = 2; console.log(n); } m(); // 2 第二個m()覆蓋第一個m() var m = 3; // 變量m覆蓋函數m console.log(m); // 3 m(); // m is not a function 此時m是個變量,不是函數 </script>