Javascript 在闭包中注释私有函数

Javascript 在闭包中注释私有函数,javascript,annotations,closures,google-closure-compiler,jsdoc,Javascript,Annotations,Closures,Google Closure Compiler,Jsdoc,如何在闭包中注释这个名为bar的私有函数 var Foo = (function() { var fn = (function() { return { bar: function(baz) { alert(baz); } }; })(); return { doBar: function(label) { fn.bar(

如何在闭包中注释这个名为bar的私有函数

var Foo = (function() {
    var fn = (function() {
        return {
            bar: function(baz) {
                alert(baz);
            }
        };
    })();
    return {
        doBar: function(label) {
            fn.bar(label);
        }
    }
});
像这样

/**
 * @type {function(string): string}
 * @private
 */
bar: function(baz) {
    return baz;
}
还是这样

/**
 * @param {string}
 * @private
 * @return {string}
 */
bar: function(baz) {
    return baz;
}
甚至是两个文档的组合?但是我会复制函数参数和返回类型的信息

/**
 * @param {string}
 * @private
 * @type {function(string): string}
 * @return {string}
 */
bar: function(baz) {
    return baz;
}
完整的jsDoc示例,用于整个闭包示例。“private”函数不再有@private jsDoc(如“John”所说)


看起来你的样品有问题。函数中的标签不起任何作用。你的意思是:var fn=(function(){return{bar:function(baz){return baz;}};})();还有,在这种情况下,你希望“@private”是什么意思?首先,这只是一个例子,但让我提醒标签,让它更清楚。对于@private,我的意思是,bar函数确实在私有范围内,不能从Foo实例外部访问。Foo.bar('bazz')是不可能的,而Foo.doBar('bazz')是可以访问的。我想你误解了。您的“var fn”未定义。为定义它而执行的函数没有返回值。实际上,您有一个带标签的语句。您需要的是返回名为bar的对象文字:return{'bar':…};AFAIK闭包的“@private”是基于文件的(它只能被认为是文件的私有,而不是实例的私有)。在您的示例中,没有必要注释方法“@private”,因为它在结构上是通过定义“Foo”的方式隐藏的。没有一个对象(假设它被更正为您想要的)包含属性“bar”的公开对象。事实上,我忘了返回它。更正了。
/**
 * @type {function(): Object}
 * @public
 */
var Foo = (function() {
    /**
     * @type {function(): Object}
     * @private
     */
    var fn = (function() {
        return {
            /**
             * @param {string} baz Something to alert
             */
            bar: function(baz) {
                alert(baz);
            }
        };
    })();
    return {
        /**
         * @param {string} label A label string
         * @public
         */
        doBar: function(label) {
            fn.bar(label);
        }
    }
});