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

时间:2018-01-31 01:23:39

标签: javascript google-closure-compiler

我正在使用Google的closure-compiler 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的extern文件,但这似乎违背了typeof检查的目的。此外,在其他情况下foo被声明两次,封闭编译器也会抱怨。

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要声明变量:

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