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.函式儲存的是程式碼字串
以上的都是個人見解,可能在說法上有漏洞,只供參考。自己也是在學習中,總結記錄一下,如有紕漏,還望諸位多多指導,在此謝過!