在javascript中使用'new Function'作为内部函数(在闭包内)被认为是一种不好的做法?

时间:2016-08-25 12:49:40

标签: javascript function

当我读到关于curry函数的内容时,我认为很难创建一个用于构建嵌套函数的递归。然后我看一下ramda的实现,就是这样 是的,用任意数量的参数创建一个curried函数。然后, 为什么不用这样的字符串构建它:

function curry(fn, arity) {
  arity = typeof arity === 'undefined' ? fn.length : arity

  if (arity < 1) {
    return fn
  }

  function build(n, space = 2, args = []) {
    if (n < 1) {
      args = args.map(arg => 'a' + arg)
      return `fn(${args.join(', ')})`
    } else {
      return `function (a${n}) {\n${' '.repeat(space)}` +
        `return ${build(n - 1, space + 2, args.concat(n))}\n` +
        `${' '.repeat(space - 2)}}`
    }
  }
  const curryCreator = new Function('fn', 'return ' + build(arity))
  return curryCreator(fn)
}

可以像这样使用:

function sum5(a, b, c, d, e) {
  return a + b + c + d + e
}

const sum = curry(sum5)

哪会产生这个:

function (a5) {
  return function (a4) {
    return function (a3) {
      return function (a2) {
        return function (a1) {
          return fn(a5, a4, a3, a2, a1)
        }
      }
    }
  }
}

new Function用于此功能有多糟糕?

用例就是生成一个函数和参数占位符 在上面的例子中。我的问题比this更具体 解决evalnew Function的一般用例。如你看到的 在我的例子中,它是一个私有函数,不会在另一个函数中调用 的地方。

0 个答案:

没有答案