如何防止谷歌闭包编译器删除一行
How to prevent Google Closure Compiler from removing a line
我有一个函数,我可以在其中创建一个测试元素。在返回函数之前,我将取消对测试元素的引用,以帮助防止内存泄漏。但是闭包编译器正在删除它认为不需要的那行 b/c(在两种模式下)。我可以添加某种注释来防止删除该行吗?
function isExample (testElem) {
var bool;
testElem = testElem || document.createElement('div');
// Do stuff in here to determine `bool`
// ...
// Then nullify the reference
testElem = null; // The compiler removes this line. How do I make it keep it?
return bool;
}
不需要。垃圾收集器也会这样做,所以谷歌闭包编译器只是删除它。
我不知道有任何垃圾收集器会泄漏内存,如果有的话,JS会遇到很大的问题。
请记住,JS具有函数作用域,这意味着一旦执行脱离函数,函数中定义的任何变量都将被垃圾回收。
这是垃圾收集器的基本功能之一,如果 js 引擎会泄漏内存,那将是非常糟糕的。
对于旧的 IE 泄漏,您可以尝试通过在将其取消后添加testElement = []
来解决编译器。
在这种情况下,编译器是正确的。但是,如果您执着于保留代码,则需要使用带引号的语法来导出值或使用接收器对象。
function sinkValue(x) {
sinkValue[' '](x);
return x;
}
sinkValue[' '] = function(){};
function isExample (testElem) {
var bool;
var obj = { 'elem': testElem || document.createElement('div') };
// Do stuff in here to determine `bool`
// ...
obj['elem'] = null;
sinkValue(obj);
return bool;
}
带引号的语法可防止重命名和消除死代码,因此您将否定对该对象属性的任何优化。在这种情况下,尽管您将对象的生命周期延长到函数之外(这似乎与您的意图相反)。
没有注释可以准确指定所需的内容。您可以在以下位置查看与此相关的讨论:
- "el.offsetWidth;"被错误地视为没有副作用
- 保留通常无副作用功能的副作用
操作,因为它正在删除无用的代码。
相关文章:
- 如何在使用Javascript删除某一行时更新表
- 使用VBScript或Javascript从文本框(文本区域)中删除最后一行空/空行
- 删除数据库(JSP)上的一行
- 使用Ajax和JQuery从SQL数据库中添加和删除一行
- infrastics igGrid:如何使用javascript删除一行
- 使用jQuery删除表行,但禁止删除第一行
- Html-从数据库中删除一行
- 关于FF的IMACROS.JS-如何删除宏末尾源csv文件的第一行
- 删除表中的最后一行时显示警报窗口
- 如何编辑和删除jQuery数据表的每一行
- 删除表的最后一行,除非它是使用 jquery 的唯一行
- 单击按钮时删除一行
- 如何防止谷歌闭包编译器删除一行
- 表 PHP 中每一行的删除按钮
- 通过单击删除同一行中存在的链接来删除特定行
- 删除表中的最后一行
- 前端 MySQL,删除一行
- 如何在 jQuery/javaScript 中从 txt 文件中删除一行
- 使用表单中的PHP按钮根据变量ID从MYSQL数据库表中删除一行
- 如何从javascript的最后一行删除某些字符串