如何在JavaScript中构造无限fun()()()...()()?

时间:2018-02-02 06:01:16

标签: javascript

只是一个奇怪的问题。我想创建一个可以处理无限“层”的函数? make add(2)(3),add(1)(2)(3)...(10)all works。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

你可以轻微抓住。返回值必须是您可以强制转换为数字的函数。以下是:



function add (addend) {
  'use strict'
  const sum = (this || 0) + addend
  const chain = add.bind(sum)

  for (const prop of Object.getOwnPropertyNames(Number.prototype)) {
    chain[prop] = Number.prototype[prop].bind(sum)
  }

  return chain
}

console.log(add(1))
console.log(add(1)(2))
console.log(add(1)(2)(3))
// convinced yet?
let four = add(4)
console.log(typeof four, four === 4)
// it's a function, not a number, so coerce to a primitive first
four = Number(four)
console.log(typeof four, four === 4)




add()是一个包含其context (this)和所有Number.prototype属性的函数,包括其Symbol.toPrimitive属性。在strict mode中,上下文表现得更好,允许您将其定义为数字的原始值,而不是默认为window并将绑定的基元强制转换为Object