[英]How to prevent Google Closure Compiler from removing a line
我有一个函数,我在其中创建一个测试元素。 在返回函数之前,我将对test元素的引用无效,以帮助防止内存泄漏。 但是闭包编译器正在删除它认为不需要的那条线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;
}
这不是必需的。 垃圾收集器也会这样做,因此Google Closure Compiler会删除它。
我不知道任何垃圾收集器泄漏内存,如果有的话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;
}
引用语法可防止重命名和死代码消除,因此您将否定对该对象属性的任何优化。 在这种情况下,虽然您将对象的寿命延长到函数之外(这似乎与您的意图相反)。
没有注释可以准确指定您想要的内容。 您可以在以下位置查看与此相关的讨论:
编译器完全正在做的事情是删除无用的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.