在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