为什么我不能将函数传递给Function构造函数?

时间:2012-05-31 07:06:40

标签: javascript

JavaScript有一个Function构造函数,它可以生成一个匿名函数:

new Function()

将函数作为参数传递给Function时,出现语法错误:

new Function(function(){})

生成

  

SyntaxError:意外的令牌(

但是,当我通过一个号码时,一切都很好:

new Function(10)

为什么在将函数传递给Function时会出现语法错误?

4 个答案:

答案 0 :(得分:2)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

考虑到除了最后一个参数之外的所有参数都是参数名称,我不希望除字符串之外的任何其他参数。

我认为语法错误是因为您在内部使用的JS引擎尝试将函数转换为字符串的方式。我真的很惊讶它没有窒息10。

此外,我怀疑你出于好奇而这样做,但如果你不这样做,我建议你不要在你可以控制的代码中使用Function。除非您需要在运行时使用字符串并从中创建函数,否则没有理由使用Function。

答案 1 :(得分:2)

因为Function构造函数需要String参数并将最后一个参数计算为函数体,所以期望它是有效的javascript。当它尝试将匿名函数参数计算为String时,它会失败,因为该匿名函数的String表示形式不是有效的javascript。

答案 2 :(得分:0)

我不知道那种错误,但你可以尝试这样的事情:

var func = function(){};
new Function(func)

答案 3 :(得分:0)

我建议使用:

new Function(func)

而不是

new Function(func(){})

您必须将func定义为单独的函数。 以下示例演示:

<html>
<script>
function init(func)
{
    func();
}
function greet()
{
    alert("good morning!");
}
</script>
<body onLoad="init(greet);">
<body>
</html>