3

我尝试new Function()在计算器中使用,但发现它无法访问我传递给它所在函数的参数。我像这样使用它:

function go(a, b, c) {
    return new Function('return a + b + c')();
}

go(4, '/', 2);

但它不起作用,因为它说 a 是未定义的。有没有办法解决这个问题?

4

3 回答 3

6

你可能想要:

function go(a, b, c) {
    return new Function('return ' + a + b + c + ';')();
}

go(4, '/', 2);

但这不是正确的方法。为您支持的每个操作创建一个独特的功能。

于 2012-06-28T20:53:31.063 回答
0

也许这个?

var add = function (a, b, c) {
  return a + b + c;
};

然后像这样调用:

var sum = add(3, 4, 5); // sum is 12
于 2012-06-28T21:00:18.703 回答
0

我相信@Truth 对您要达到的目标的评估是正确的。但是,我很好奇为什么a未定义。

事实证明,规范声明当Function用作构造函数时,评估函数体的范围是全局环境: 第 15.3.2.1 节

这与eval()使用当前范围不同。

于 2012-06-28T21:17:08.360 回答