为什么Google Closure Compiler不会重命名这些外部变量?

3
根据文档(https://developers.google.com/closure/compiler/docs/api-tutorial3#externs)显示,当没有外部声明时,闭包编译器似乎应该重命名变量,包括在使用来自外部代码的函数/变量时。他们提供的例子是:
function makeNoteDom(noteTitle, noteContent, noteContainer) {
  // Create DOM structure to represent the note.
  var headerElement = textDiv(noteTitle);
  var contentElement = textDiv(noteContent);
...
}

这段代码中,textDiv函数是由某种第三方库在全局范围内声明的。它说textDiv应该被声明为外部以防止重命名。

我的问题是 - 当我将这个代码或类似代码放入Closure Compiler中,没有任何外部声明,为什么textDiv没有被重命名(这会导致代码出错),因为文档表明它会被重命名?

1个回答

2
编译器假定对未定义函数的调用实际上是对外部函数的调用。使用命令行编译器,您可以使用--warning_level VERBOSE将此条件视为错误。Web应用程序主要用于演示,并默认情况下假定如此。虽然您可以设置VERBOSE警告级别,但它不会更改此功能。有关选项的信息,请参见其他Web服务选项页面。我已经提交了一个错误报告。由于属性重命名算法,如果在externs中的对象上没有声明相同的属性名称,则未声明的属性将以破坏性方式重命名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接