我想调用一个函数,其名称在变量中。
例如:
我动态获取字符串"pageTracker._trackpageview('/url/page1.page'); "并将其分配给变量,如下所示
var myFunction = pageTracker._trackpageview('/url/page1.page');";
Run Code Online (Sandbox Code Playgroud)
现在,当我提交页面时,我想执行变量 myFunction 中的函数。
谢谢你们。
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)
为什么要这样做呢?
只需执行 eval 即可立即运行该函数。如果被调用函数本身抛出错误,我们无法区分它和解析错误之间的区别。因此,通过从文本中创建一个函数,我们可以将解析它的时间与执行它的时间分开。
仅使用 newFunction = Function(myFunction) 不会编译它,因此速度较慢。因此,使用 new Function() 返回一个函数(进而创建一个函数)是我们的技巧。我们也可以这样使用 eval,但我更喜欢 new Function。
其他人所说的关于对 eval (和 new Function())要非常小心的说法是正确的。它可能是恶意脚本的漏洞。
| 归档时间: |
|
| 查看次数: |
5470 次 |
| 最近记录: |