(这有点 XY 问题,但我决定问我感兴趣的问题,而不是我目前严格需要的问题。)我知道各种现代 JavaScript 引擎都有死代码消除器和其他方法来摆脱没有效果或副作用的代码,但是您如何识别和/或编写此类代码?
关于死代码消除的Wikipedia 文章给出了一个无法访问代码的简单示例,即发生在return
函数中的无条件语句之后的代码。但是我可以指望现代的主流 JavaScript 引擎来消除这些代码吗?例如,Rhino 或 V8 会消除此代码吗?
function (foo) {
return;
return foo;
}
function (foo) {
foo = foo;
}
没有操作功能怎么办?
(function () {}(foo));
jQuery.noop(foo);
所有这些例子都愚弄了 JSHint,虽然 JSLint 捕捉到了奇怪的赋值 foo = foo
,你仍然可以很容易地用 noops 或一对变量来欺骗它:
function (foo) {
var bar = foo;
}
如果他们可以欺骗静态代码分析器,他们会欺骗引擎本身吗?
如果没有仔细检查所有不同 JavaScript 引擎的源代码,是否有任何方法可以识别和/或构建在程序运行之前肯定会被消除的代码类型,如果这样的代码是没有被忽略,还是仅仅是一种设计选择?