博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在JavaScript中释放变量
阅读量:7222 次
发布时间:2019-06-29

本文共 1132 字,大约阅读时间需要 3 分钟。

hot3.png

                                                       在JavaScript中释放变量

    在Javascript是可以使用delete来手动删除变量,通过这样的方法让GC来回收内存,但在JS中并不是所有的对象都可以被删除的, kangex在他的博文中对此作了详细说明:

    在 Stoyan Stefanov’s 中 Object-Oriented JavaScript 书中曾提到:方法可以被当作普通变量那样被删除。(function is treated as a normal variable—it can be copied to a different variable and even deleted.),并有例程:

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,而不可被删除:

var x = 1;delete x; // falsetypeof x; // 1function x(){}delete x; // falsetypeof x; // "function"

    但是对象的属性、数组成员却是可以删除的:

var o = { x: 1 };delete o.x; // truetypeof o.x; // undefinednum = 123;  //因为num前面没有var,所有等价于: this.num = 123, 即当前对象的一个属性。delete num;

    因此如果我们要回收某个对象可以使用Object来封装一下。

转载于:https://my.oschina.net/leblancs/blog/790687

你可能感兴趣的文章
阿牛的EOF牛肉串
查看>>
随笔2013/2/13
查看>>
笨办法32循环和列表
查看>>
java序列化
查看>>
谈谈NITE 2的第一个程序HandViewer
查看>>
VS2008 未响应 假死
查看>>
html5、css3及响应式设计入门
查看>>
Win10還原成最乾淨的狀態
查看>>
Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程
查看>>
SaltStack作业
查看>>
单例设计
查看>>
springboot+缓存
查看>>
/*10个filter的属性*/ ---毛玻璃效果
查看>>
折半查找习题解答
查看>>
51单片机的P1
查看>>
[32]JSON
查看>>
3689: 异或之
查看>>
字符串模式匹配KMP算法
查看>>
Android Drawable和Bitmap图片之间转换
查看>>
Debian 8 安装 Nvidia 显卡驱动
查看>>