在Javascript中用多个括号关闭

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

任何人都可以解释这个函数如何通知更多的参数括号。我无法清楚地理解它。

function sum(a) {

  var sum = a

  function f(b) {
    sum += b
    return f
  }

  f.toString = function() { return sum }

  return f
}

alert( sum(1)(2) )  // 3
alert( sum(5)(-1)(2) )  // 6
alert( sum(6)(-1)(-2)(-3) )  // 0
alert( sum(0)(1)(2)(3)(4)(5) )  // 15
提问于
用户回答回答于

第一次调用函数时,第一个值被存储在中sum。之后function f(b)将被退回,保持暂时的结果sum。随着每个连续叫你执行功能f-执行sum += b和返回˚F一次。如果需要字符串上下文(比如在alert,或者a中console.logf.toString,则返回result(sum)。

function sum(a) {

  var sum = a

  function f(b) {
    sum += b
    return f  //<- from second call, f is returned each time
              //   so you can chain those calls indefinitely
              //   function sum basically got "overridden" by f
  }

  f.toString = function() { return sum }

  return f //<- after first call, f is returned
}

说明:

alert( sum(6)(-1)(-2)(-3) )  // 0
           /\ function sum called, f returned
              /\ the returned function f is called, f returns itself
                  /\ again
                     /\ and again
                         /\ at last, alert() requires string context,
                            so f.toString is getting invoked now instead of f
用户回答回答于

要看的是这段代码

function f(b) {
    sum += b
    return f
  }

该函数返回对自身的引用,以便尽可能多地调用它。关于它的一个重要的事情是它有一个被调用的tostring函数,并且由于tostring是在函数内部定义的,sum()所以它可以访问变量sum和它的值当前值(通过改变f()

扫码关注云+社区