JavaScript中能否将参数数组直接传入Function()构造函数?
解决方案:用展开运算符或apply传递参数数组给Function构造函数
使用ES6展开运算符(推荐)
直接用...运算符把参数数组展开,作为Function构造函数的前序参数,最后跟上函数体即可,完全符合你要的单一声明方式:
示例JSON:{ "arguments": ["in1", "in2", "in3"], "body": "return in1 + in2 + in3;" }对应的代码:
var f = new Function(...json.arguments, json.body); // 调用示例 console.log(f(1, 2, 3)); // 输出6兼容旧环境的方案(无需ES6)
如果运行环境不支持ES6语法,可以用Function.apply()实现,它允许以数组形式传递构造函数的参数:var f = Function.apply(null, json.arguments.concat(json.body)); // 调用示例 console.log(f(1, 2, 3)); // 输出6这里通过
concat把函数体拼接到参数数组末尾,形成包含所有参数名和函数体的数组,apply会自动将数组元素逐个传入Function构造函数。
本质上Function构造函数本身就支持接收任意数量的字符串参数——前N个是参数名,最后一个是函数体。不管是逐个传参还是用数组展开,都是把参数名字符串依次传入,完全能满足你扩展多参数支持的需求,同时保持函数的单一声明形式。
内容的提问来源于stack exchange,提问作者Xavier Xanthopoulos
相关产品推荐
相关产品推荐

