ネストされた関数を直接文書化することはできません。私は Prongs ソリューションが気に入らなかったので、名前空間のない別の実装を使用しました ( JavaではなくJS です!)。
アップデート:
OPで指定された正確なユースケースを反映するように回答を更新しました(JSdocは使用するのがかなり面倒なので、これは公平です)。それがどのように機能するかは次のとおりです。
/** @module foobar */
/** @function */
function foobarbaz() {
/*
* You can't document properties inside a function as members, like you
* can for classes. In Javascript, functions are first-class objects. The
* workaround is to make it a @memberof it's closest parent (the module).
* manually linking it to the function using (see: {@link ...}), and giving
* it a @name.
*/
/**
* Foo object (see: {@link module:foobar~foobarbaz})
* @name foo
* @inner
* @private
* @memberof module:foobar
* @property {Object} foo - The foo object
* @property {Object} foo.bar - The bar object
* @property {function} foo.bar.baz - The baz function
*/
var foo = {
/*
* You can follow the same steps that was done for foo, with bar. Or if the
* @property description of foo.bar is enough, leave this alone.
*/
bar: {
/*
* Like the limitation with the foo object, you can only document members
* of @classes. Here I used the same technique as foo, except with baz.
*/
/**
* Baz function (see: {@link module:foobar~foo})
* @function
* @memberof module:foobar
* @returns {string} Some string
*/
baz: function() { /*...*/ }
}
};
return foo;
}
残念ながら、JSdoc は Java のポートであるため、Java には意味があっても JS には意味がない、またはその逆の多くの機能があります。たとえば、JS では関数はファーストクラスのオブジェクトであるため、オブジェクトまたは関数として扱うことができます。したがって、次のようなことを行うとうまくいくはずです:
/** @function */
function hello() {
/** @member {Object} */
var hi = {};
}
しかし、JSdoc はそれを関数として認識するため、そうはなりません。名前空間、私のテクニックを使用@link
するか、クラスにする必要があります。
/** @class */
function Hello() {
/** @member {Object} */
var hi = {};
}
しかし、それも意味がありません。クラスはJSに存在しますか? いいえ、そうではありません。
より良いドキュメント ソリューションを見つける必要があると思います。{object}
型の表示方法 ( vsなど)に関するドキュメントに矛盾があることさえ見てきました{Object}
。
私のテクニックを使ってクロージャーを文書化することもできます。