js 預解析
阿新 • • 發佈:2021-02-08
技術標籤:js
先預解析 後執行
變數預解析(變數提升),函式預解析(函式提升)
變數提升只是把變數宣告提升到作用域的最前面,不提升操作。如
變數提升後是:
var a ;
console.log(num);
console.log(num);
a = 10; //這裡a=10是位置其實是不動。
函式提升
把所有的函式宣告提升到前面,但是不呼叫。
函式提升後
注意:如果是賦值的方式寫的函式,不可以提升。只能提升變數宣告的函式。
JavaScript是解釋型的語言,但是他並不是真的在執行的時候逐句的往下解析執行。
JavaScript並非僅在執行時簡簡單單的逐句解析執行!
當變數和函式的宣告處在作用域比較靠後的位置的時候,變數和函式的宣告會被提升到作用域的開頭。
先宣告
<script> //一下程式碼 f1(); console.log(c); console.log(b); console.log(a); function f1() { var a = b = b = 9;//注意這裡,不是同時宣告abc,如果是同時宣告abc應該用逗號隔開 var a=9,b=9,c=9,這樣才對。這裡只是聲明瞭a而已。 console.log(a); console.log(b); console.log(c); } //預解析過程,相當於下面的程式碼 function f1() { var a ;//這裡的a是函式的區域性變數,作用域在函式。 a = b = b = 9;//因為前面沒有宣告b c 所以他們是全域性變數。 console.log(a); console.log(b); console.log(c); } f1(); console.log(c); console.log(b); console.log(a); //結果應該是 9 9 9 9 9 報錯 </script>