2012-06-28 36 views
3

我尝试在计算器中使用new Function(),我觉得它并没有进入我传递给它的函数的参数,我使用它是这样的:新函数()不能访问参数? 。

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

go(4, '/', 2); 

但它不是因为它说a是未定义的。有什么办法可以解决这个问题吗?

+1

你为什么要返回一个函数来返回一个函数? –

+1

为什么不''return function(){return a + b + c; };' - 这会工作。 – Pointy

+1

@Truth:我认为这是一个愚蠢的例子来说明这个问题:/ – Matchu

回答

6

你可能想:

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

go(4, '/', 2); 

但是,这是不是要走的正确方法。针对您所支持的每个动作制定不同的功能。

0

也许这样?

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

然后调用这样:

var sum = add(3, 4, 5); // sum is 12 
+0

这不是他想要做的。请注意,其中一个参数是一个运算符。 – johusman

0

我相信@Truth是在他的你想达到什么样的评估是正确的。然而,我很好奇为什么a是未定义的。

事实证明,说明书指出,当Function用作构造器,用于评价函数体的范围是对全球环境: Section 15.3.2.1

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