在JavaScript中釋放變量javascript
在Javascript是可使用delete來手動刪除變量,經過這樣的方法讓GC來回收內存,但在JS中並非全部的對象均可以被刪除的, kangex在他的博文中對此做了詳細說明:Understanding delete
在 Stoyan Stefanov’s 中 Object-Oriented JavaScript 書中曾提到:方法能夠被看成普通變量那樣被刪除。(function is treated as a normal variable—it can be copied to a different variable and even deleted.),並有例程:java
var sum = function(a, b) {return a + b;} var add = sum; delete sum; typeof sum; //undefined
這實際上是錯誤的。 做者極可能使用了Firebug來快速地調試過這段代碼,若是將其粘到Chrome中結果就會是:數組
var sum = function(a, b) {return a + b;} var add = sum; delete sum; typeof sum; //function
由於JS對象都會有一些內置屬性,如: ReadOnly, DontEnum, DontDelete and Internal;但在FF的console中,全部的代碼都是經過eval_r("codes")來執行的,Javascript中有存在 Global code(當前)\ Function code\ Eval code 幾種對象。 經過eval執行的JS對象都是不含:DontDelete屬性,所以能夠刪除,所以書上講的不必定是對的,即便是看上去很權威的書。
在JS中經過 var\function 聲明因含有DontDelete,而不可被刪除:this
var x = 1; delete x; // false typeof x; // 1 function x(){} delete x; // false typeof x; // "function"
可是對象的屬性、數組成員倒是能夠刪除的:調試
var o = { x: 1 }; delete o.x; // true typeof o.x; // undefined num = 123; //由於num前面沒有var,全部等價於: this.num = 123, 即當前對象的一個屬性。 delete num;
所以若是咱們要回收某個對象可使用Object來封裝一下。code