在 JavaScript 中动态创建具有默认参数的函数

Dynamically create a function with default parameters in JavaScript

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 似乎已经支持默认参数(see here),但上面的行被拒绝为语法错误。

由于 new Function 是 eval 的一种形式,您可以使用以下代码完成该任务:

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

我不知道这是否可行 - 其他人必须告诉你 - 但如果它仍然是一个问题,为什么不使用 eval()?

这几行中的内容应该是合法的:

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

Now I'm wondering if it's possible to use default parameters also for functions created dynamically with the Function constructor

是的,根据 the spec 这是可能的。参数参数一如既往地连接在一起,然后根据 FormalParameters 产生式进行解析,其中包括默认值。

Firefox 39 seems to already support default parameters, but the line above is rejected as a syntax error.

好吧,这是一个错误 :-)(可能 this one
您应该可以通过使用

来解决它
var fn = Function('return function(a = 2, b = 3) { return a * b; }')();