我尝试在计算器中使用new Function()
,我觉得它并没有进入我传递给它的函数的参数,我使用它是这样的:新函数()不能访问参数? 。
function go(a, b, c) {
return new Function('return a + b + c')();
}
go(4, '/', 2);
但它不是因为它说a是未定义的。有什么办法可以解决这个问题吗?
我尝试在计算器中使用new Function()
,我觉得它并没有进入我传递给它的函数的参数,我使用它是这样的:新函数()不能访问参数? 。
function go(a, b, c) {
return new Function('return a + b + c')();
}
go(4, '/', 2);
但它不是因为它说a是未定义的。有什么办法可以解决这个问题吗?
你可能想:
function go(a, b, c) {
return new Function('return ' + a + b + c + ';')();
}
go(4, '/', 2);
但是,这是不是要走的正确方法。针对您所支持的每个动作制定不同的功能。
也许这样?
var add = function (a, b, c) {
return a + b + c;
};
然后调用这样:
var sum = add(3, 4, 5); // sum is 12
这不是他想要做的。请注意,其中一个参数是一个运算符。 – johusman
我相信@Truth是在他的你想达到什么样的评估是正确的。然而,我很好奇为什么a
是未定义的。
事实证明,说明书指出,当Function
用作构造器,用于评价函数体的范围是对全球环境: Section 15.3.2.1
这不同于eval()
它使用当前范围。
你为什么要返回一个函数来返回一个函数? –
为什么不''return function(){return a + b + c; };' - 这会工作。 – Pointy
@Truth:我认为这是一个愚蠢的例子来说明这个问题:/ – Matchu