如何记录立即调用+匿名函数?

How do I document immediate invocation + anonymous function?

使用 JSDoc,如何记录此代码?

var mynamespace = {};

/**
 * What do I put here?
 */
mynamespace.myfunc = (function () {
    var i = 0;
    /**
     * Do I need to put anything here?
     */
    return function (a) {
        return a + i++;
    };
}());

本例中的签名可以是:

/**
 * @param {Number} base
 * @return {Number}
 */

我正在使用 Google Closure 编译器,它不喜欢 return function () { 附近的 JSDoc。我猜必须有一个正确的方法来做到这一点。我想我真正的问题是:"how do I shut up GCC?" :p

我四处看了看,并没有确切地发现这种情况。我想这很常见。

编辑:根据您的评论,您可以通过 "silencing warnings" 让 GCC 闭嘴。看这里:https://github.com/google/closure-compiler/wiki/Warnings#warnings-level-api

我的其余回答是关于记录 JavaScript,不一定是 JSDoc 的内部。

我建议将(外部)匿名函数编写为下面的命名函数声明。这个函数的文档应该是一个普通的函数,属于return类型的函数,注意,稍后会详细说明。

将命名空间属性分配给调用该函数的结果。在此处记录您的新命名空间函数,就像普通函数一样。

IIFE 很好地展示了 JS 的强大功能,但为了提高可读性……嗯。 IIFE 最终是不必要的(我有 95% 的人支持这个说法,希望看到一个反例)。

var mynamespace = {};

/**
 * A brand new safe, private, lovely closure
 * 
 * @param {Number} 
 * @return {Number} Will always be NaN since i was never defined? ;)
 */  
mynamespace.myfunc = factory();

/**
 * Factory for safe, private, lovely closure
 *
 * @return {Function} A fresh closure
 */    
function factory() {
    var i;

    // Return new closure (see signature above)
    return function (a) {
        return a + i++;
    };
}

我不是 JSDoc 专家,但我可以给你一些建议

首先,我建议将 i 变量初始化为 0,这样您的函数就没有 NaN 值 return。但这只是代码的详细信息,与您根据 JSDoc 发表评论的问题无关。

也许您应该以这种方式组织您的代码以 "shut up" GCC:

var mynamespace = {};

/**
 * Display the value we pass with a counter incremented each time we call the method
 * @name myFunc
 * @params {Number} a - value to add to the counter
 * @return {Number} addition of a and i++
 */
mynamespace.myfunc = (function () {
    var i;
    /**
     * @alias myFunc
     */
    function add(a) {
        return a + i++; 
    };
    return add;
}());

可能是因为你return一个匿名函数。

希望对您有所帮助。

编辑 :

我发现@alias 标签可以达成交易。也许你可以试试我在代码片段中编辑的代码。

More details