1. 程式人生 > >JavaScript中的預解釋

JavaScript中的預解釋

首先來介紹一下JavaScript中的資料型別。

JavaScript中有兩大基本資料型別:

(1)基本資料型別

        number、string、undefined、boolean、null

(2)引用資料型別

        Object:物件{}、陣列、正則、Date

        function

那麼基本資料型別都是按照值來操作的,而引用資料型別都是按照引用地址來進行操作的

當瀏覽器載入HTML頁面的時候,首先會提供一個供全域性JS程式碼執行的環境,也叫做全域性作用域。

預解釋

什麼叫做預解釋?

在當前作用域中,JS程式碼執行之前,瀏覽器首先會預設的把所有帶var和function的進行提前的宣告或者定義。

(1)我們建立一個變數是分兩步做的。比如說 var age = 12;這是我們在全域性作用域下建立的一個變數。

        宣告:var age;    ->指的是告訴瀏覽器在全域性作用域下有一個變量了,叫age。

        定義:age= 12;   ->給我們宣告的變數賦值。

(2)那麼對於帶var和function關鍵字的在預解釋的時候瀏覽器乾的事還是不一樣的。

        var:在預解釋的時候只是提前宣告,但並沒有被定義(也就是說沒有被賦值)。

        function:在預解釋的時候宣告和定義都完成了。

        這也就解釋了我們在編碼是常常發生的一個現象,如下程式碼所示:

   console.log(age);  //結果為undefined
 var age = 12; 

        age是undefined是因為預解釋的時候只是幫我們聲明瞭,但是age沒有定義。

   fn();//fn執行的結果為 Hello JavaScript
   function fn(){
       console.log("Hello JavaScript");
   }

        fn之所以能執行成功是因為在預解釋的時候已經宣告並且定義完了。

 (3)預解釋只發生在當前作用域下。這句話什麼意思呢,就是說當頁面開始載入的時候,瀏覽器只對當前的全域性作用域進行預           解釋,而被宣告在函式內部的變數或函式是不進行預解釋的,只有當執行的時候,才會在該函式生成的私有作用域中進行            預解釋。(這裡就不距離說明了)

簡單說一下JavaScript中的記憶體分類

    棧記憶體:用來提供一個供JS程式碼執行的環境,也就是作用域:全域性作用域、私有作用域。

    堆記憶體:用來儲存引用 資料型別的值 。

                 a.物件儲存的是屬性名和屬性值

                 b.函式儲存的是程式碼字串

      以上的都是個人見解,可能在說法上有漏洞,只供參考。自己也是在學習中,總結記錄一下,如有紕漏,還望諸位多多指導,在此謝過!