怎么了?
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.
因此,我们可以看到,这只是闭包编译器对跨多个文件的全局代码的理解不够好,无法进行替换。您可以随时自行更换 :)