我注意到,谷歌关闭编译没有重命名document
为类似d
减少的空间。
我想不出这会破坏代码的情况(即,document
指向其他东西的情况)。其实也是一样window
。
有保护document
这种方式的理由吗?
==编辑==
通过重命名,我正在考虑重新分配它。下面的例子。
var d=document;
var obj1=d.getElementById("obj1");
var obj2=d.getElementById("obj2");
... // with enough uses of document so it makes to reassign it size-wise.
ProblemFactory的猜测是正确的。
这是//TODO
封闭编译器中的源代码。例如,如果我们没有保留document
,window
而是使用它们进行了遍历d
,那么当前关闭编译器将不知道它是否正在从另一个文件覆盖全局。就像评论说的那样,这将在将来解决。
如果检查内部的闭包编译器源代码,VariableReferenceCheck.java
则会发现以下内容:
private class ReferenceCheckingBehavior implements Behavior {
@Override
public void afterExitScope(NodeTraversal t, ReferenceMap referenceMap) {
// TODO(bashir) In hot-swap version this means that for global scope we
// only go through all global variables accessed in the modified file not
// all global variables. This should be fixed.
// Check all vars after finishing a scope
for (Iterator<Var> it = t.getScope().getVars(); it.hasNext();) {
Var v = it.next();
checkVar(v, referenceMap.getReferences(v).references);
}
}
如果检查热交换算法本身,我们可以看到:
// Note we use the global scope to prevent wrong "undefined-var errors" on
// variables that are defined in other JS files.
因此,我们可以看到,这只是闭包编译器无法充分理解跨多个文件的全局代码以进行替换。您随时可以自己更换:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句