JavaScript有一个Function
构造函数,它可以生成一个匿名函数:
new Function()
将函数作为参数传递给Function
时,出现语法错误:
new Function(function(){})
生成
SyntaxError:意外的令牌(
但是,当我通过一个号码时,一切都很好:
new Function(10)
为什么在将函数传递给Function
时会出现语法错误?
答案 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>