【问题标题】:Google closure-compiler complaining about undeclared variable in typeof call谷歌闭包编译器抱怨 typeof 调用中未声明的变量
【发布时间】:2018-02-06 06:55:01
【问题描述】:

我正在使用 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 被声明了两次,而闭包编译器也会抱怨。

提前感谢您的帮助。

【问题讨论】:

  • 这是一个全局变量吗?如果不是,您为什么要尝试使用未声明的变量?也许这就是您所说的包装上下文的意思?
  • @SkinnyPete - 这是一个外部函数,但并非在所有情况下都适用。我正在尝试根据函数是否已定义来创建条件逻辑。

标签: javascript google-closure-compiler


【解决方案1】:

你需要声明变量:

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

【讨论】:

  • 正如我上面提到的,添加声明会导致“声明两次”错误。我正在尝试根据是否定义 foo() 创建条件逻辑。这适用于标准 JavaScript,但闭包编译器错误,我不想完全禁用这个错误类。
  • @saarp 我编辑了答案以显示如何抑制单个语句的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多