有没有办法用javascript从字符串创建函数?
2022-08-30 04:30:30
例如;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
如果这是字符串,我需要一个名为 fnc 的函数。并弹出警报屏幕。fnc();
eval("alert(1);")
不能解决我的问题。
例如;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
如果这是字符串,我需要一个名为 fnc 的函数。并弹出警报屏幕。fnc();
eval("alert(1);")
不能解决我的问题。
从字符串创建函数的更好方法是使用:Function
var fn = Function("alert('hello there')");
fn();
这具有优点/缺点,即当前范围内的变量(如果不是全局的)不适用于新构造的函数。
传递参数也是可能的:
var addition = Function("a", "b", "return a + b;");
alert(addition(5, 3)); // shows '8'
我添加了一个jsperf测试,用于从字符串创建函数的4种不同方法:
将正则表达式与函数类一起使用
var func = "function (a, b) { return a + b; }".parseFunction();
使用带有“返回”的函数类
var func = new Function("return " + "function (a, b) { return a + b; }")();
使用官方函数构造函数
var func = new Function("a", "b", "return a + b;");
使用评估
eval("var func = function (a, b) { return a + b; };");