如何记录立即调用+匿名函数?
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 标签可以达成交易。也许你可以试试我在代码片段中编辑的代码。
使用 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 标签可以达成交易。也许你可以试试我在代码片段中编辑的代码。