天天看點

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

1、Javascript 中變量可能包含兩種不同資料類型的值:基本類型的值和引用類型的值。

對于引用類型的值,可以為其添加屬性和方法,也可以改變其屬性和方法,例如:

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體
JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

但是,不能對基本類型的值添加屬性,例如:

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體
JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

2、JavaScript 沒有塊級作用域。對于有塊級作用域的語言,例如 C、C++、Java 中,新聲明的變量隻存在與目前塊級作用域中,塊級語句執行完畢後變量即會銷毀。例如 (Java):

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

運作結果報錯,顯示 i 未定義:

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

而在 JavaScript 中,沒有塊級作用域,變量不會被立即銷毀,例如 (JavaScript):

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體
JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

3、JavaScript 函數的參數和大多數其他語言中的參數有所不同。JavaScript 函數不介意傳遞進來多少個參數,也不介意參數的資料類型。即使定義的參數隻接受兩個參數,在調用函數的時候也未必需要傳遞兩個參數。可以選擇傳遞一個、三個甚至不傳遞。

JavaScript 中的參數在内部使用一個數組來定義,函數接收的始終是一個數組。在函數體内通過 arguments 對象通路參數數組,例如:

JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體
JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體
JavaScript 學習筆記 (二)——變量、作用域、函數和記憶體

4、JavaScript 最常用的垃圾收集方式為标記清除,通過對變量的标記進行判斷,并對其采取相應的政策。

為確定暫用較少的記憶體可以使得頁面獲得更好的性能,通常需要對變量進行解除引用,即将其值設定為 null。