`
奥义之舞
  • 浏览: 284490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于在JS里删除变量 销毁所占内存 的讨论

 
阅读更多
如:
引用
var obj = document.getElementById(id);
obj = null;

引用
var obj = document.getElementById(id);
delete obj;

引用
var obj = document.getElementById(id);
obj = null;
delete obj;

那种销毁的内存多呢,
引用
我们的目标是:让内存不在增长
分享到:
评论
7 楼 satanultra 2011-04-14  
delete obj 你确定可以生效?
6 楼 clue 2011-04-14  
JS中,如果一个对象不能被访问到,那就会被GC回收。
通常是不用特意去把局部变量置null的

除非,有全局变量直接或间接引用(例如闭包引用了当前环境并被存储)、与Dom对象循环引用,这时就需要主动去断开引用,以便GC回收。

然后,IE还有一些比较恶心的问题,比如节点删除用removeNode会泄漏、IE Object leaks、一些特定的Dom节点必定会泄漏等等,还是建议发代码专门分析,
5 楼 danny.chiu 2011-04-14  
奥义之舞 写道
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
4 楼 奥义之舞 2011-04-14  
mercyblitz 写道
对象都没有销毁呀,你要销毁document里面的元素,可以调用DOM的API,Node#removeChild(Node)

我不是要销毁这个元素,是销毁这个对象,让内存怎么设置不增长,因为这个对象要一直创建,也没说一定是页面元素,例如,还可以是:
var array = new Array();
等 呵呵
3 楼 奥义之舞 2011-04-14  
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的时候,他会一直创建一个新的地址引用、
2 楼 mercyblitz 2011-04-13  
对象都没有销毁呀,你要销毁document里面的元素,可以调用DOM的API,Node#removeChild(Node)
1 楼 int08h 2011-04-13  
1、delete obj根本啥也没做,delete不是这么用的
2、设为null后没立刻销毁,要等待GC
3、出了作用域,不设null照样能GC

综上所述,一个都不用写

相关推荐

    内存变量检查 内存变量检测

    内存变量检查 内存变量检测 内存变量检查 内存变量检测 内存变量检查 内存变量检测内存变量检查 内存变量检测内存变量检查 内存变量检测

    易语言内存取变量数据地址

    综上所述,“易语言内存取变量数据地址”是易语言编程中的核心技能之一,涉及到内存地址获取、文本地址获取和内存数据的复制等操作。掌握这些技巧,能帮助开发者更好地理解和控制程序运行过程,实现更复杂的功能。

    php 变量引用与变量销毁机制详细介绍

    引用在垃圾回收中的处理,就是遵循这个逻辑,确保在删除引用时不会意外删除原始变量。 总的来说,PHP的变量引用机制有助于节省内存,特别是在处理大对象或大量数据时。同时,了解这一机制也有助于编写更高效且不...

    js动态引入外部js脚本并获取里面的变量值.pdf

    "js动态引入外部js脚本并获取里面的变量值"这个主题就是关于如何在JavaScript中实现这种功能的讨论。 首先,`jQuery`库提供了一个非常方便的方法来实现动态加载外部脚本:`$.getScript()`。这是一个异步方法,它...

    全局变量、局部变量、静态变量即内存管理

    从分配内存空间看,全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量...

    JavaScript程序设计课件:变量.pptx

    在声明变量时,JavaScript会自动为变量分配内存空间,无需程序员手动管理。 ### 2.2.3 变量的命名规则 3. **命名规则**: - 变量名必须以字母、下划线(_)或美元符号($)开头。 - 之后可以是字母、数字、...

    JS变量问题详解

    JavaScript中的变量是编程中一个非常基本且重要的概念,它存储各种数据类型的值,是程序中用于存储数据的容器。变量作用域的定义决定了变量可以被访问的区域,对于理解变量在不同上下文中的访问权限非常重要。 首先...

    JavaScript全局变量的本质及页面共享问题 -页面

    JavaScript全局变量的本质与页面共享问题是一个重要的编程概念,尤其是在网页开发中。JavaScript是一种广泛使用的脚本语言,它的全局变量在程序中的角色独特,且与页面的生命周期和浏览器环境紧密相关。 首先,我们...

    易语言读写内存变量

    易语言读写内存变量源码,读写内存变量,输出变量

    JavaScript变量作用域及内存问题实例分析

    JavaScript变量作用域及内存问题是一个非常重要的概念,在编程过程中起着至关重要的作用。本文将对JavaScript变量作用域、内存问题以及相关的操作技巧进行深入的分析。 首先,我们需要了解变量作用域的相关知识。在...

    js变量作用域

    在JavaScript中还存在一种特殊的现象,即在构造函数内部声明的变量,如果不使用`var`、`let`或`const`声明,则该变量会被认为是全局变量。但在某些情况下,这种行为似乎不符合预期,出现了一种被称为“神奇现象”的...

    C语言不同变量内存区域(堆,栈,代码区,全局区,BSS段)

    在C语言编程中,了解内存的分配方式以及变量在内存中的存储位置是非常重要的。这不仅有助于优化程序性能,还能防止因不当操作导致的内存泄漏或溢出问题。本篇文章将详细探讨C语言中变量所处的五种主要内存区域:堆、...

    PHP中使用unset销毁变量并内存释放问题

    总之,unset()函数虽然能够移除变量与数据之间的关联,释放变量所占用的内存,但在某些情况下,它并不保证立即释放内存。开发者在编写需要精细控制内存使用的代码时,需要对PHP的内存管理机制有充分的理解,以免出现...

    VF辅导:内存变量操作命令及文件操作命令

    ### VF辅导:内存变量操作命令及文件操作命令详解 #### 一、内存变量操作命令 内存变量是Visual FoxPro (VF)中非常重要的概念之一,主要用于存储数据,并且可以在程序中重复使用。VF提供了多种内存变量操作命令,...

    读写内存变量文件.rar_内存

    压缩包中的"tb121.txt"和"www.pudn.com.txt"可能是包含内存变量数据的文本文件,或者是关于内存管理或内存优化的教程文档。在实际应用中,这些文件可能包含了内存变量的示例、内存布局信息,或者是关于如何高效地...

    InTouch如何使用间接变量[归纳].pdf

    在值显示栏中,选择字符串,在里面添写内存变量,然后确定。 ### 5. 打开选料对话框 打开选料对话框,在石英石处右击,选择动态链接,在触动按钮栏,打开动作,写脚本,然后确定。 ### 6. 运行程序 点击运行按钮...

    全局变量、局部变量、静态全局变量、静态局部变量的区别

    一旦函数执行完毕,局部变量就会被销毁,释放其所占用的内存空间。局部变量的生命周期与其所在函数的执行周期一致,函数调用时创建,函数返回时销毁。 ### 静态全局变量(Static Global Variable) 静态全局变量是...

    008 应用变量等4件套

    在某些语言中,如Java和Python,有一个自动的垃圾回收机制,负责清理不再使用的变量所占用的内存。而在C++这样的语言中,程序员需要手动管理内存,使用new和delete操作符分配和释放内存。 最后,我们可能还会涉及...

    全局变量&局部变量

    为了更好地理解全局变量和局部变量,我们首先需要对程序在内存中的分布有所了解。程序在运行时,操作系统会为其分配一系列的内存区域,每个区域都有特定的作用。 1. **代码区**:存放程序的代码部分,包括各种函数...

Global site tag (gtag.js) - Google Analytics