1.在操做對象時,其實是在操做對象的引用而不是實際的對象。爲此,引用類型的值是按引用訪問的。算法
2.當從一個變量向另外一個變量複製引用類型的值時,兩個變量實際上將引用同一個對象,所以,改變其中一個變量,就會影響另外一個變量。函數
var obj1 = new Object(); var obj2 = obj1; obj1.name = "Nicholas"; alert(obj2.name); //"Nicholas"
3.訪問變量有按值和按引用兩種方式,而參數只能按值傳遞;
在向參數傳遞基本類型的值時,被傳遞的值會被複制給一個局部變量,即命名參數;
在向參數傳遞引用類型的值時,會把這個值在內存中的地址複製給一個局部變量,所以這個局部變量的變化會反映在函數的外部;code
function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); //"Nicholas"
上面實例代碼,person變量將內存地址做爲值傳遞給setName參數。第一次給obj變量添加name屬性是在person對象的內存地址基礎上添加,以後從新賦新對象給obj變量,該對象爲局部對象,內存地址與person對象並不相同,因此第二次添加name屬性並不會影響person屬性。也證實了參數傳遞方式爲按值傳遞。對象
4.檢測基本數據類型能夠使用typeof;檢測引用類型使用instanceof;ip
alert(colors instanceof Array);
5.JavaScript沒有塊級做用域,也就是for循環、if語句等{}並不會擁有本身的做用域,因此在這些語句中定義的變量,在外部執行環境中也是能夠被訪問的。內存
for (var i=0; i < 10; i++){ doSomething(i); } alert(i); //10
6.「標記清除」是目前主流的垃圾收集算法,這種算法的思想是給當前不使用的值加上標記,然
後再回收其內存作用域