区分JavaScript中的正常功能或闭包?

时间:2019-02-24 04:11:57

标签: javascript closures

在学习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)

程序员如何知道这一点?仅通过阅读文档?

1 个答案:

答案 0 :(得分:1)

我没有使用koa2或其他节点服务器框架的经验,但是确定一个函数返回的值是另一个函数还是常规值在JavaScript运行时是完全可行的。

例如,假设您有一个名为if ( s[0] == 'F' || s[0] == 'f' ) 的函数,该函数返回某些内容,但您之前并不知道。在这种情况下,我们可以检查返回的值并相应地执行操作。

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