有没有办法用javascript从字符串创建函数?

2022-08-30 04:30:30

例如;

var s = "function test(){
  alert(1);
}";

var fnc = aMethod(s);

如果这是字符串,我需要一个名为 fnc 的函数。并弹出警报屏幕。fnc();

eval("alert(1);")不能解决我的问题。


答案 1

从字符串创建函数的更好方法是使用:Function

var fn = Function("alert('hello there')");
fn();

这具有优点/缺点,即当前范围内的变量(如果不是全局的)不适用于新构造的函数。

传递参数也是可能的:

var addition = Function("a", "b", "return a + b;");
alert(addition(5, 3)); // shows '8'

答案 2

我添加了一个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; };");

http://jsben.ch/D2xTG

2 个结果样本:enter image description here enter image description here