1. 程式人生 > 其它 >js 預解析

js 預解析

技術標籤: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>