Javascript 为什么我不能将函数传递给函数构造函数?
JavaScript有一个Javascript 为什么我不能将函数传递给函数构造函数?,javascript,Javascript,JavaScript有一个函数构造函数,它生成一个匿名函数: new Function() 将函数作为参数传递给函数时,出现语法错误: new Function(function(){}) 产生 SyntaxError:意外标记( 但是,当我通过一个数字时,一切都很好: new Function(10) 为什么将函数传递给函数时会出现语法错误? 考虑到除了最后一个参数外,其他所有参数都是参数名,我不希望除了字符串以外的任何东西都能工作 我可以想象,语法错误是由于您在内部使用的JS引擎试图将
函数
构造函数,它生成一个匿名函数:
new Function()
将函数作为参数传递给函数
时,出现语法错误:
new Function(function(){})
产生
SyntaxError:意外标记(
但是,当我通过一个数字时,一切都很好:
new Function(10)
为什么将函数传递给函数时会出现语法错误?
考虑到除了最后一个参数外,其他所有参数都是参数名,我不希望除了字符串以外的任何东西都能工作
我可以想象,语法错误是由于您在内部使用的JS引擎试图将函数转换为字符串的方式造成的
此外,我怀疑您这样做只是出于好奇,但如果您不是,我建议您不要在可以控制的代码中使用函数。除非您需要在运行时获取字符串并从中生成函数,否则没有理由使用函数。
考虑到除了最后一个参数外,其他所有参数都是参数名,我不希望除了字符串以外的任何东西都能工作
我可以想象,语法错误是由于您在内部使用的JS引擎试图将函数转换为字符串的方式造成的
此外,我怀疑您这样做只是出于好奇,但如果您不是,我建议您不要在您可以控制的代码中使用函数。除非您需要在运行时获取字符串并从中生成函数,否则实际上没有理由使用函数。因为函数构造函数需要字符串参数并计算最后一个是函数体,期望它是有效的javascript。当它尝试将匿名函数参数作为字符串求值时,它失败,因为该匿名函数的字符串表示形式不是有效的javascript。因为函数构造函数期望字符串参数,并将最后一个求值为函数ion主体,期望它是有效的javascript。当它尝试将匿名函数参数作为字符串求值时,它失败,因为该匿名函数的字符串表示形式不是有效的javascript。我不知道该错误的原因,但您可以尝试以下操作:
var func = function(){};
new Function(func)
我不知道这个错误的原因,但您可以尝试以下方法:
var func = function(){};
new Function(func)
我建议使用:
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>
函数init(func)
{
func();
}
函数
{
警惕(“早上好!”);
}
我建议使用:
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>
函数init(func)
{
func();
}
函数
{
警惕(“早上好!”);
}
因为那时世界会爆炸:)。你可以试着这样做:因为那时世界会爆炸:)。你可以试着这样做:那会有同样的问题。那会有同样的问题。“我真的很惊讶它不会被10窒息。”我猜,与函数一样,JS将10
转换为字符串,然后尝试将其用作新函数的主体,只是一个只包含数字的字符串实际上是一个有效的函数主体10
all本身只是一个不做任何事情的表达式,但它实际上并不是一个语法错误<代码>10\n 11\n警报(12)
将起作用(即使没有分号,只要指示的地方有实际的换行;10;11;警报(12);
都在一行上起作用)。@nnnnnnnn当然会,但函数是不同的上下文。10因为变量名无效,所以我希望它以某种方式抛出异常或错误。我不希望出现语法错误,尽管我认为传递函数时出现语法错误是完全可以理解的,因为传递函数可以在解析时捕获。(实际上,对于一个literal新函数(10)
,我也会理解一个语法错误。var a=10;新函数(a);
我不希望有这样的注释。根据语言的语法,它是有效的,我只是认为解析器也可以捕获它。很抱歉,我在您回复注释的同时编辑了我的注释。new Function()的参数
需要是一个字符串,或者可以转换为字符串的东西,它本身作为函数体是有效的。当函数转换为字符串时,它包括单词“function”和参数等:“function(){}”
,因此这并不构成有效的函数体。“10”
是一个有效的函数体。@nnnnnn啊…没有从这个角度考虑。出于某种原因,我没有意识到必须有0个或更多的参数名,因此,如果只提供参数,它就会成为函数体。:“我真的很惊讶它没有阻塞到10。”我猜,与函数一样,JS将10
转换为字符串,然后尝试将其用作新函数的主体,只是一个只包含数字的字符串实际上是一个有效的函数主体10
all本身只是一个不做任何事情的表达式,但它实际上并不是一个语法错误<代码>10\n 11\n警报(12)
将起作用(即使没有分号,只要指示的地方有实际的换行;10;11;警报(12);
都在一行上起作用)。@nnnnnnnn当然会,但函数是不同的上下文。10因为变量名无效,所以我希望它以某种方式抛出异常或错误。我不希望出现语法错误,尽管我认为传递函数时出现语法错误是完全可以理解的,因为传递函数可以在解析时捕获。(因此,实际上,对于一个literal新函数(10)
,我也会理解一个语法错误。var a=10;新函数(a);
我不希望出现语法错误