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

时间:2012-05-14 18:25:33

标签: javascript gwt

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

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

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

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

我尝试了eval函数但是我的语法错误或者根本就没有使用eval。

感谢任何帮助。谢谢!

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

1 个答案:

答案 0 :(得分:2)

假设您要传递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