0

JavaScript 有一个Function构造函数,它产生一个匿名函数:

new Function()

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

new Function(function(){})

生产

SyntaxError:意外的令牌(

但是,当我传递一个数字时,一切都很好:

new Function(10)

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

4

4 回答 4

2

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

考虑到除了最后一个参数之外的所有参数都是参数名称,我不希望字符串以外的任何东西都可以工作。

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

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

于 2012-05-31T07:10:43.473 回答
2

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

于 2012-05-31T07:10:53.293 回答
0

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

var func = function(){};
new Function(func)
于 2012-05-31T07:12:28.437 回答
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>
于 2012-05-31T07:32:25.253 回答