首页 > 解决方案 > 如何记录返回函数调用的函数(用于尾调用优化)

问题描述

我正在尝试提高 JSDoc 的技能,我有这个方法:

/**
 * Cleanup step.
 *
 * @return {Void}
 */
beforeDestroy() {
    window.removeEventListener('resize', this.onResize);
},

这似乎是正确的,但对于我正常的 JavaScript 编码风格,我会这样:

beforeDestroy() {
    return window.removeEventListener('resize', this.onResize);
},

因为如果可以的话,我总是尝试返回函数调用(作为与尾调用优化相关的函数式编程习惯)。这引出了我的问题,如何记录返回函数调用的函数?

我天真的估计是这样的:

/**
 * Cleanup step.
 *
 * @return {(String, Function) => Void}
 */
beforeDestroy() {
    return window.removeEventListener('resize', this.onResize);
},

我想听听这种事情的正确/正常情况。我想知道如何像这样记录函数“返回返回 void 的函数调用”或“返回返回字符串的函数调用”之类的其他内容。

我以前看到有人问过柯里化函数,这种关于文档的问题对我来说马上就失控了,比如一个人需要多少个函数?

这样的事情对我来说似乎不合理:

 * @return {(String, Function) => (Object) => Void}

比如“文档”需要多少对未来执行的意识?

标签: javascriptjsdoc

解决方案


您使用@callback(或@function);见:https ://jsdoc.app/tags-callback.html

例如,类似的东西。

/**
 * This callback is a returned event listener
 * @callback removedCallback
 * @param {number} nameOfNumberParam
 * @param {string} nameOfStringParam
 */

/**
 * Cleanup step.
 *
 * @return {removedCallback} - The removed callback
 */
beforeDestroy() {
    return window.removeEventListener('resize', this.onResize);
},

但是,您还想问自己......这真的对任何人都有用,还是我只是为了记录而记录?如果你真正想要的是一个类型系统,那么 Typescript 可以做得更好(除了文档之外,还给你很多其他好处)。

如果您只是为了文档,请考虑您的受众。对于某些观众来说,上述风格将是最好的,但对于许多其他观众来说,使用更简单的风格可能同样适用:

/**
 * Cleanup step.
 *
 * @return function - The removed callback
 */
beforeDestroy() {
    return window.removeEventListener('resize', this.onResize);
},

推荐阅读