在JavaScript中釋放變量

                                                       在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

相關文章
相關標籤/搜索