锁定老帖子 主题:关于在JS里删除变量 销毁所占内存 的讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-15
确实 多一个var 就区别了全局变量和内部变量 对JS还真不太清楚内部变量是如何决定回收机制的~~ 不过全局变量倒是肯定可以减少这种多余数据的创建
|
|
返回顶楼 | |
发表时间:2011-04-15
zhengjie_dna 写道 createElement的时候还是要设 NULL不然gc 回收不了
其实到现在我还是没找到怎么去测试是否释放 这个我相信 |
|
返回顶楼 | |
发表时间:2011-04-15
happysoul 写道 确实 多一个var 就区别了全局变量和内部变量 对JS还真不太清楚内部变量是如何决定回收机制的~~ 不过全局变量倒是肯定可以减少这种多余数据的创建
这句话其实很不正确、、 全局变量 用完之后 就销毁不了了, 如果是当做 一直的一个数据处理还行,另外 没写VAR的 ,直接默认的就是全局变量,而且可以删除,不比这个好么 |
|
返回顶楼 | |
发表时间:2011-04-16
danny.chiu 写道 奥义之舞 写道 int08h 写道 1、delete obj根本啥也没做,delete不是这么用的
2、设为null后没立刻销毁,要等待GC 3、出了作用域,不设null照样能GC 综上所述,一个都不用写 因为这个对象可能 要一直循环,所以要设置为null啊,不然的话,循环一次JS 有创建了一个新的对象, for (var i = 0; i < waveDataLength; i++) { array = waveData[i].split(","); point = 1 / array.length; for (var j = 0; j < array.length; j++) { num = i + Math.round((point * j) * 10) / 10; item = parseFloat(array[j]); dataArray.push([num, item]); num = null;item=null; } array = null; item = null; point = null; } 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用、 我觉得你还是没了解他的意思,进入下一个循环的时候,array引用被重新赋值,以前的数组没了引用,就会被GC(没出作用域也一样),设不设null没什么区别,你可以写个循环测试下时间。 引用 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用
可以把array声明在循环外部,这样就一直是同一个引用。只是每次指向的是不同的对象了。 PS:js是函数级作用域,最好是把所有变量在函数开始就声明。 欢迎拍砖我的坦克游戏:http://www.iteye.com/topic/783537 支持楼主这个理解,把变量定有放在循环外面,搞定 |
|
返回顶楼 | |
发表时间:2011-04-16
wmj007 写道 danny.chiu 写道 奥义之舞 写道 int08h 写道 1、delete obj根本啥也没做,delete不是这么用的
2、设为null后没立刻销毁,要等待GC 3、出了作用域,不设null照样能GC 综上所述,一个都不用写 因为这个对象可能 要一直循环,所以要设置为null啊,不然的话,循环一次JS 有创建了一个新的对象, for (var i = 0; i < waveDataLength; i++) { array = waveData[i].split(","); point = 1 / array.length; for (var j = 0; j < array.length; j++) { num = i + Math.round((point * j) * 10) / 10; item = parseFloat(array[j]); dataArray.push([num, item]); num = null;item=null; } array = null; item = null; point = null; } 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用、 我觉得你还是没了解他的意思,进入下一个循环的时候,array引用被重新赋值,以前的数组没了引用,就会被GC(没出作用域也一样),设不设null没什么区别,你可以写个循环测试下时间。 引用 这一块array如果不设置为NUll的时候,他会一直创建一个新的地址引用
可以把array声明在循环外部,这样就一直是同一个引用。只是每次指向的是不同的对象了。 PS:js是函数级作用域,最好是把所有变量在函数开始就声明。 欢迎拍砖我的坦克游戏:http://www.iteye.com/topic/783537 支持楼主这个理解,把变量定有放在循环外面,搞定 呵呵 本来就是这样做的、、 |
|
返回顶楼 | |
发表时间:2011-04-18
LZ患有内存泄漏焦虑症,鉴定完毕!
|
|
返回顶楼 | |
发表时间:2011-04-18
aimicheng 写道 LZ患有内存泄漏焦虑症,鉴定完毕!
被逼的 beat it |
|
返回顶楼 | |
发表时间:2011-04-18
完全是画蛇添足,先去看完js的垃圾回收装置,变量作用域,内存的关系再来说
还有一些列子,完全是扯淡 |
|
返回顶楼 | |