使用数组中的参数创建JavaScript函数

使用数组中的参数创建JavaScript函数,javascript,Javascript,我想用JavaScript从字符串自动创建一个函数对象,但我在参数方面有点困难。到目前为止,我能做的是: var objectStr = "function(x) { return x; }"; var myFunc = Function("x", "{ return x; }"); var objectStr = "function(x, y) { return x*y; }"; 如果我做一些假设,函数总是以“函数(x)”开头,我可以做: var objectStr = "functio

我想用JavaScript从字符串自动创建一个函数对象,但我在参数方面有点困难。到目前为止,我能做的是:

var objectStr = "function(x) { return x; }";
var myFunc = Function("x", "{ return x; }");
var objectStr = "function(x, y) { return x*y; }";
如果我做一些假设,函数总是以“函数(x)”开头,我可以做:

var objectStr  = "function(x) { return x;}";
var funcBody = objectStr.replace("function(x)", "");
var myFunc = Function("x", funcBody);
这让我接近自动接近。我还可以将字符串“x”指定给一个值,并将其作为参数传入。然而,我真的很想去一个我可以提供以下内容的地方:

var objectStr = "function(x) { return x; }";
var myFunc = Function("x", "{ return x; }");
var objectStr = "function(x, y) { return x*y; }";
此时,我想将参数x和y提取到一个字符串数组中。我相信我可以非常明智地使用正则表达式来实现这一点

var parameters = [ "x", "y" ];
但问题是,我现在如何从参数数组中创建一个具有多个参数的函数

编辑

这样做的原因是为了生成一个回调函数。我无法控制这些参数的值。要说明的jQuery示例(尽管这不是我正在使用的库)可能是:

// Define myFunc using approach above
// then somewhere later in 3rd party code an itterator block
// like below will call:
jQuery(data).each(function() {
    myFunc(this);
}
它之所以有效,是因为:

15.3.1作为函数调用的函数构造函数

当函数作为函数而不是构造函数调用时,它 创建并初始化新函数对象。因此函数调用 函数(…)等价于对象创建表达式new 具有相同参数的函数(…)

因此不必使用
new
,这样就可以使用
.apply
.apply
用于调用参数来自数组的函数。看

示例中在
.concat
之后传递给
.apply
的数组是:

["x", "y", "return x*y"]

因此,静态等价物是
新函数(“x”、“y”、“return x*y”)
您可以尝试使用eval,例如:


您可以使用eval来评估您的功能。像这样

希望有帮助


Suj

您知道您不必声明函数的参数,但仍然可以访问它们(无论有多少参数被发送到您的函数),对吗?@MarkSchultheiss:我添加了一个编辑来帮助说明我的用例。我无法控制参数的值,它们将根据第三方代码和回调进行分配。一位同事提到Apply,这是一个很好的答案,但我指出这是为了调用函数,而不是初始化。我想对规范有了更多的了解,我就走了。我只是想用谷歌搜索一下,但你可能知道。旧浏览器(IE8)是否符合此规范?@Ian至少在IE7中工作良好。可以使用
.apply
的原因是
Function()
的工作原理与
newfunction()
的工作原理相同。您不能使用
。如果需要使用
新建
,请应用
var funcMultipleParam = "function(x,y) {return x*y;}",
    FuncMultiple = eval("(" + funcMultipleParam + ")");

alert(FuncMultiple(10, 20));