JavaScript
變數型別
五種基本資料型別(Undefined
、Null
、Boolean
、Number
、String
)與引用型別。
在很多語言中,字串以物件的形式來表示,因此被認為是引用型別的。
ECMAScript
放棄了這一傳統。
動態屬性
引用型別可動態新增或刪除屬性、方法。基本資料型別不可以,對基本資料型別新增屬性或方法不會導致任何錯誤,但也不會新增成功。
複製變數值(將A
複製給B
)
對於基本資料型別:將A
的值複製,然後賦值給B
對於引用資料型別:將指向A
的指標複製,然後賦值給B
引數傳遞
ECMAScript
中所有函式的引數都是按值傳遞的。
資料型別檢測
基本資料型別用typeof
,引用型別用instanceof
(基於原型鏈)。
執行環境
執行環境定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有一個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。
作用域鏈
當程式碼在一個環境中執行時,會建立變數物件的一個作用域鏈。作用域鏈的用途,是 保證對執行環境有權訪問的所有變數和函式的有序訪問。作用域鏈的前端,始終都是當前執行的程式碼所在環境的變數物件。
延長作用域鏈的方式
- try-catch 語句的 catch 塊
- with語句
注意:js沒有塊級作用域
垃圾收集的兩種方式
- 標記清除
- 引用計數(迴圈引用問題)
垃圾收集產生的效能問題主要是垃圾收集的間隔時間問題。
優化記憶體佔用的最好方式是為執行中的程式碼只儲存必要的資料,一旦資料不再使用,最好通過將其值設定為
null
來釋放引用(解除引用)。