Google 闭包编译器抱怨 typeof 调用中未声明的变量

Google closure-compiler complaining about undeclared variable in typeof call

我正在使用 Google 的闭包编译器 v20180101 为典型的现代浏览器(例如 Chrome 64)缩小 JavaScript。为 v20170409 编译的相同代码没有错误。我在多个不同的打包上下文中使用相同的 JS 片段,并且不想将它们拆分成许多小文件。

相反,我添加了一些使用 typeof 的条件代码来查看是否已经定义了某些函数,如果没有,则定义它们。

这是一个非常基本的例子:

if (typeof foo === 'undefined') {
  foo = function() { return "Foo!"; }
}

对此,clojure-compiler-v20180101 抱怨:

foo.js: ERROR - variable foo is undeclared

我可以添加一个声明 var foo 的外部文件,但这似乎违背了 typeof 检查的目的。此外,在其他情况下 foo 被声明两次,闭包编译器也会抱怨。

在此先感谢您的帮助。

您需要声明变量:

/** @suppress {duplicate} */
var foo;
if (typeof foo === 'undefined') {
  foo = function() { return "Foo!"; }
}