在JavaScript中动态创建一个带有默认参数的函数

5

ECMAScript 6引入的一项特性是在JavaScript中指定未指定参数的默认值,例如:

function foo(a = 2, b = 3) {
    return a * b;
}

console.log(foo());   // 6
console.log(foo(5));  // 15

现在我想知道是否可以像这样使用默认参数来动态创建函数,使用Function构造函数:

new Function('a = 2', 'b = 3', 'return a * b;');

Firefox 39似乎已经支持默认参数(参见此处),但上面的行被拒绝为语法错误。


嗯,为什么你需要一个字符串参数而不是只是 a=2 呢?这样使用起来会稍微有些困难,不是吗? - TaoPR
1
这似乎与错误有关。 - DavidDomain
3个回答

1
现在我在想,是否可以在使用Function构造函数动态创建的函数中也使用默认参数呢?
是的,根据规范,这是可能的。参数会像往常一样连接,然后根据FormalParameters语法进行解析,其中包括默认值。

Firefox 39似乎已经支持默认参数了,但上面的代码被拒绝作为语法错误。

好吧,那是一个bug :-) (可能是这个
你应该能够通过使用以下方式解决它:
var fn = Function('return function(a = 2, b = 3) { return a * b; }')();

0

new Function 本质上是 eval 的一种形式,因此您可以使用以下代码来完成该任务:

eval('function bar (a = 2, b = 3) { return a * b; }');

可能是因为这是一个函数声明,所以 eval 将返回未定义。您应该改用函数表达式。 - Oriol

0

我不知道那是否应该工作 - 其他人会告诉你 - 但如果它继续成为问题,为什么不使用eval()呢?

这样的代码应该是合法的:

var fct1 = eval("(function foo(a = 2, b = 3) { return a * b; })")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接