ECMAScript變量分為兩種不同數據類型的值:基本類型值和引用類型值。
基本數據類型:Undefined,Null,Boolean,Number,String,按值訪問
引用數據類型:對象,按引用訪問
ECMAScript中所有函數的參數都是按照值傳遞的。也就是說,把函數外部的值復制到函數的內部的參數,就和把值從一個變量復制到另一個變量一樣。
function setName(obj){
obj.name = "zhang";
obj = new Object();
obj.name = "greg";
}
var person = new Object();
setName(person);
console.log(person.name);
檢測基本類型的方法:typeof;
檢測什么類型對象的方法:instance;
基本類型值在內存中占據固定大小的空間,因此被保存在棧空間;
從一個變量向另一個變量復制基本類型的值,會創建這個值得一個副本;
引用類型的值是對象,保存在堆內存中;
包含引用類型值得變量實際上包含的并不是對象本身,而是一個指向給對象的指針;
從一個對象向另一個對象復制引用類型的值,復制的其實是指針,因此兩個變量最終都指向同一個對象;
確定一個值是那種基本類型用typeof操作符,確定一個值是那種引用類型可以使用instanceof操作符。
“標記清除”是目前主流的垃圾收集算法,思想是給當前不適用的值加上標記,然后在回收其內存。
另一種垃圾收集算法是“引用計數”,這種算法的思想是跟蹤記錄所有制被引用的次數。JavaScript引擎目前都不在使用這種算法,但在IE中訪問非原生JavaScript對象(如DOM元素)時,這種算法仍然會導致問題。
解除變量的引用不僅有助于消除循環引用對象,而且對垃圾收集有好處。