我们是否需要在 JavaScript 中“取消设置”变量?
Do we need to “unset” variables in JavaScript?
我们需要在 JavaScript 中取消设置变量吗?为什么?
例如,在 PHP 中,建议取消设置各种循环中的所有临时变量,以保持内存可用并避免变量重复。
但无论如何,根据 php - 取消设置变量有什么好处? 问题:
取消设置变量实际上不会减少运行时的内存消耗,这是真的吗? -是的。
那么我们应该delete window.some_var;
吗?
或者我们应该使用some_var = null
?
或者我们不应该取消设置变量以避免额外的 CPU 周期?
上级:相关问题:
如何取消设置Javascript变量?
如何从 JavaScript 对象中删除属性
否,而且在某些情况下,您无法删除全局范围内的变量。使用 var 关键字正确声明的变量无法删除(另一方面,可以删除隐含的全局变量。始终使用 var 关键字来声明变量)。
此外,javascript引擎有一个名为垃圾收集器的东西,当你的代码"运行"时,它会自动查找不再使用或引用的变量。一旦找到一个,它会立即将其推入深渊(删除内存中的变量)
不,没有必要在完成变量后删除它们。如果你有这么多巨大的全局变量,这实际上是一个问题,你需要重新考虑你的设计。
是的,它在 PHP 中也很愚蠢,不,它与避免"额外的 CPU 周期"无关。
具体说来:
-
"取消设置循环中的临时变量"
它们是临时的,可能是 a) 整数或 b) 占用与整数一样多空间的引用。不要打扰。
-
"避免重复变量"
再次 – 参考资料。将仍在其他地方引用的内容设置为
null
是没有意义的。
如果你觉得它很混乱,这是一个好兆头,表明更多的东西应该超出范围(即使用更多的功能)。
在你没有提到的大多数其他情况下,引擎也足够聪明,可以正确管理你的东西。不要过早优化。
David Flanagan在他的书《JavaScript: The Definitive Guide》中很好地回答了这一点:
JavaScript 解释器执行自动垃圾回收以进行内存管理。这意味着程序可以根据需要创建对象,程序员永远不必担心这些对象的破坏或释放。当一个对象不再可访问时——当一个程序不再有任何方法引用它时——解释器知道它再也不能被使用,并自动回收它占用的内存。
这并不意味着 JavaScript 中不会发生内存泄漏。远非如此。循环(或循环)引用是实现引用计数的浏览器中的常见问题,如 IBM 在此处所述:
当两个对象相互引用时,将形成循环引用,使每个对象的引用计数为 1。在纯粹的垃圾回收系统中,循环引用不是问题:如果所涉及的两个对象都没有被任何其他对象引用,那么两者都是垃圾回收。但是,在引用计数系统中,这两个对象都不能销毁,因为引用计数永远不会达到零。在同时使用垃圾回收和引用计数的混合系统中,由于系统无法识别循环引用,因此会发生泄漏。在这种情况下,DOM 对象和 JavaScript 对象都不会被销毁。清单 1 显示了 JavaScript 对象和 DOM 对象之间的循环引用。
如果你担心你的网站包含JavaScript内存泄漏,谷歌有一个工具,恰如其分地命名为"JavaScript泄漏查找器",可以帮助你找到原因。
延伸阅读:什么是 JavaScript 垃圾回收?
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- j查询如何设置/取消设置下拉菜单的背景颜色
- 搜索包含值的json对象键,然后取消设置
- 元素单击处理程序由一个神秘的函数取消设置
- JavaScript变量在第二次单击事件时间后取消设置
- Chrome和Firefox不会取消设置会话数组,但IE和Safari会取消设置
- 在javascript if语句中取消设置$_POST
- 如何删除或取消设置Javascript变量
- 取消请求动画设置时间后的帧
- 通过javascript函数取消设置php数组元素
- 取消设置元素可见性,更改 innerHTML,然后转换回来
- 我们是否需要在 JavaScript 中“取消设置”变量?
- JavaScript:取消选择时设置单选按钮的背景(单选按钮组)
- 在 PHP 中关闭网页时如何取消设置会话
- 如何在页面关闭时取消设置会话
- Javascript;取消设置函数
- 模式关闭后取消设置 PHP 变量
- AngularJS:如何正确地设置/取消使用ng-repeat重复指令的变量
- 如何取消设置/取消多个Fx.Morphs
- 在grunt/ requires构建期间设置/取消调试标志