javascript - 为什么 Closure Compiler 无法识别自执行匿名函数中的类型声明?

标签 javascript design-patterns google-closure-compiler jsdoc

当我通过 Closure Compiler 运行一个相当大的库时,我收到了很多“Unknown type” 警告,当我的类型在自执行匿名函数中声明时,它们似乎会发生。这并没有什么奇怪的,但是如果我去掉自执行函数,类型声明似乎可以工作(至少在这个简单的测试中是这样)。

我不确定我的代码注释是否有问题,或者代码中是否有任何非法内容,但我认为这完全符合标准,并且是模块化 API 的标准方法。

下面的测试代码创建了一个命名空间(只是一个普通的旧 JS 对象)并附加了一个枚举(一个对象字面量)和一个函数。

var mynamespace = {};
(function (mynamespace) {
    /**
     * Some enum.
     * @enum {number}
     */
    mynamespace.SomeEnum = {
        FOO: 1,
        BAR: 2
    };

    /**
     * Frazzle some type.
     * @param {mynamespace.SomeEnum} qux The type to frazzle.
     * @return {boolean} whether the operation succeeded.
     */
    mynamespace.frazzle = function(qux) {
        return true;
    }
}(mynamespace));

// call it
mynamespace.frazzle(mynamespace.SomeEnum.FOO);

看起来不错,对吧?闭包编译器错误:

[jscomp] Compiling 1 file(s) with 37 extern(s)
[jscomp] X:\dev\solclientjs\sdk\tools\jscomptest.js:14: WARNING - Parse error. Unknown type mynamespace.SomeEnum

[jscomp]      * @param {mynamespace.SomeEnum} qux The type to frazzle.

最佳答案

编辑:

原始答案完全错误。

这显然是编译器中的错误。我还没有找到关于这个确切问题的错误报告,但我发现了两个错误报告似乎解决了这个问题的反面(编译器应该发出警告,但除非你解开匿名函数,否则不会)。

http://code.google.com/p/closure-compiler/issues/detail?id=134

http://code.google.com/p/closure-compiler/issues/detail?id=61

无论如何,当与类型表达式一起使用时,匿名函数看起来很奇怪。

关于javascript - 为什么 Closure Compiler 无法识别自执行匿名函数中的类型声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176084/

相关文章:

javascript - 关于 jQuery 中的 getJSON 函数

D3 中的 Javascript 模块模式

Java 类/继承结构

javascript - 使用闭包编译器删除 console.log

javascript - 预处理 Javascript 以删除对象属性名称引号

javascript - Photoswipe.js//给图片添加padding

javascript - 使用 JavaScript 更改 HTML 对象

javascript - 通过 $.ajax 和 $.get/$.post 填充关联数组的差异

C++ 装饰器模式

javascript - 在使用 Google 闭包编译器时处理 jQuery parseHTML() 和 html(),,,