如何在使用 eval() 评估 JavaScript 时将回调函数定义作为参数传递

How to pass callback function definitions as parameters while evaluating a JavaScript using eval()?

本文关键字:回调 函数 定义 参数传递 JavaScript 评估 eval      更新时间:2023-09-26

我有一个json对象,它存储了一个JavaScript say

    var jsonObj = {
      "js": "var x=1;'n   callback(x);"
    }

现在要执行这个 JavaScript,我需要提供一个回调的实现。假设我们的回调只打印值 x。

那么我应该如何使用 jsonObj 进行调用.js以便给定的 javascript 执行并打印 x 的值(回调打印值)。

我尝试了 eval 函数,但要么我的语法错误,要么这里根本没有使用 eval。

任何帮助,不胜感激。谢谢!!

注意:如果有帮助,我实际上是在使用 gwt 编写一个 Firefox 插件。这种代码的平静是作为原生JavaScript函数编写的。

假设你想传入callback,你会使用 Function 构造函数而不是 eval ,并定义参数。

var jsonObj = {
  "js": "var x=1;'n   callback(x);"
};
var f = Function('callback', jsonObj.js);

然后你可以传递函数参数:

f(function(n) { alert(n); }); // 1

http://jsfiddle.net/HWCVD/


Function构造函数的设计使传递给它的最后一个参数是函数的主体,并且前面的所有参数都是函数的参数。

因此,如果要添加其他参数,只需将它们提供给Function构造函数即可。

var jsonObj = {
  "js": "var x=y + 1;'n   callback(x);"
};
var f = Function('y', 'callback', jsonObj.js);

然后传递参数:

//  v-"y"
//  v
  f(2, function(n) { alert(n); }); // 3
//         ^
//         ^-"callback" 

http://jsfiddle.net/HWCVD/16