javascript - 区分 JavaScript 中的普通函数或闭包?
问题描述
当我学习 JavaScript 时,我对如何调用一个可能是 clousre 的函数感到困惑。我以前用过Java。
当我为 koa2 编写中间件时,我会写:
async function gzip(ctx, next) { }
如果我们需要一个选项:
function gzipWithOption(option){
return async function gzip(ctx, next) { }
}
或者:
module.exports = options => {
return async function gzip(ctx, next) { }
}
我的困惑是,koa2 或其他编译器系统如何知道它是否应该调用:
theDarkFunc(param)
或者:
theDarkFunc(option)(param)
程序员怎么知道的?仅通过阅读文档?
解决方案
我没有专门使用 koa2 或其他节点服务器框架的经验,但是在 JavaScript 运行时确定函数返回的值是另一个函数还是常规值是非常可行的。
例如,假设您有一个调用的函数f
返回一些东西,但您事先不知道。在这种情况下,我们可以检查返回的值并相应地执行操作。
f = () => { ... }
val = f()
// you don't know the type of val, so let's find out
if (val instanceof Function) {
// val is a function, so you handle it in one way
} else {
// val is not a function, so you handle it in another way
}
您也可以使用typeof f()
,'function'
如果返回的值f()
是一个函数,它将返回(请注意,它typeof
返回一个字符串,因此单词 'function' 周围有引号)
val = f()
typeof val === 'function'
typeof val !== 'function'
推荐阅读
- json - 无法在批处理脚本中连接 2 个变量的值
- java - Spring:当我们还自定义 init() 或 @PostConstuct 时,为什么需要 InitializingBean 的 afterPropertiesSet
- javascript - Vue中如何维护登录用户
- php - WordPress 迁移问题
- java - 如何在spring集成中将目标值从许多消息驱动的通道适配器传递到公共入站通道
- javascript - 我的用户如何为我们的站点创建 CNAME 记录,以便我们可以反映他们创建的页面?
- r - 是否可以在闪亮中并行化 DT::DataTable 渲染?
- google-translate - 谷歌翻译 API 错误未定义
- marklogic - 当数据库大小太大时,如何从存储在 MarkLogic DB 中的 XML 中获取唯一的元素名称?
- css - 具有边框底部和边框半径的按钮不是预期结果