在 JavaScript 中动态执行函数

0 javascript eval form-submit

我想调用一个函数,其名称在变量中。

例如:
我动态获取字符串"pageTracker._trackpageview('/url/page1.page'); "并将其分配给变量,如下所示

var myFunction = pageTracker._trackpageview('/url/page1.page');";
Run Code Online (Sandbox Code Playgroud)

现在,当我提交页面时,我想执行变量 myFunction 中的函数。

谢谢你们。

Eri*_*ikE 5

function functionFromString(funcDef) {
   try {
      return (new Function("return function() {" + funcDef + "};"))();
   } catch (e) {
      alert(e);
      return (function() {});
   }
}

var myFunction = "pageTracker._trackpageview('/url/page1.page');";

var realFunction = functionFromString(myFunction);
realFunction();
Run Code Online (Sandbox Code Playgroud)

为什么要这样做呢?

  1. 只需执行 eval 即可立即运行该函数。如果被调用函数本身抛出错误,我们无法区分它和解析错误之间的区别。因此,通过从文本中创建一个函数,我们可以将解析它的时间与执行它的时间分开。

  2. 仅使用 newFunction = Function(myFunction) 不会编译它,因此速度较慢。因此,使用 new Function() 返回一个函数(进而创建一个函数)是我们的技巧。我们也可以这样使用 eval,但我更喜欢 new Function。

其他人所说的关于对 eval (和 new Function())要非常小心的说法是正确的。它可能是恶意脚本的漏洞。