更好的方法在Javascript中清空变量和对象
Better approach nulling variables, objects in Javascript
我正在为移动设备构建一些东西,并希望以某种方式清除,空对象,变量来释放一点内存。这里我有两个简短的例子,我相信都是匿名函数,但哪种方法更好或更有效?如果我说错了,很抱歉。对我来说,两者似乎都做同样的事情,虽然我更喜欢第一个对象不会被创建,直到我需要它。第二个版本将立即执行代码创建变量,对象等,但不做主要的构建功能,直到我需要它。
我只是想弄清楚哪种方式更常见。我知道像我这样的初学者大多误解了匿名函数的用法。
V1var app = function() {
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
//do some things
console.log(a + ', ' + b);
//do a cleanup
app.cleanup = function() {
a = null;
b = null;
console.log(a, b);
}
}
setTimeout(app, 200);
V2 var app = {};
(function(){
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
app.build = function(){
//do some things
console.log(a + ', ' + b);
}
//do a cleanup
app.cleanup = function(){
a = null;
b = null;
console.log(a, b);
}
setTimeout(app.build,200);
})();
html或event后面
<input type="button" onclick="app.cleanup()" value="clean" />
您不应该担心释放资源。JavaScript有一个垃圾收集器,它会捡起超出作用域的变量并销毁它们。当您使用delete obj.yourReference
、reference = null
或类似的方法不需要某个对象时,删除该对象的引用,让垃圾收集器完成其余的工作。
您会发现#1将自动收回a
和b
变量本身,如果您删除您的app.cleanup()
定义。除非您这样做,否则a
和b
都包含在您留下的cleanup
函数创建的闭包中,因此您正在阻止垃圾收集器做它的事情。
要去掉#1中的整个app
,你必须做delete window.app
或app = null
,因为窗口保存了对它的引用
相关文章:
- 函数触发时清空数组
- 空变量的 else 语句
- 清空$_GET和$_POST,表单使用form.submit()
- 在 javascript 事件单击后清空输入
- 清空并附加元素的扩展高度
- 使用 jquery 发布 JSON 数据给了我空变量
- 无法在提交之间清空数组
- 输入字段在 jQuery 的 slideUp()/slideDown() 上清空
- 提交按钮将清空输入的值
- 清空表中的所有字段
- javascript清空一个数组并进行验证
- 从DOM中清空一系列元素的最快方法是什么
- Sails.js beforeValidate()清空值参数
- 清空JS中的字符串
- 未捕获的类型错误:this.reset不是函数-在ajax调用后清空输入时出错
- 在设置标头之前清空localStorage
- 在 ASP.NET 中,您可以字符串.清空焦点中的文本框
- 如何清空变量/将变量转回未定义
- 每次运行清空 javascript 函数中的所有变量
- 更好的方法在Javascript中清空变量和对象