Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我不能将函数传递给函数构造函数?_Javascript - Fatal编程技术网

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

Javascript 为什么我不能将函数传递给函数构造函数?,javascript,Javascript,JavaScript有一个函数构造函数,它生成一个匿名函数: new Function() 将函数作为参数传递给函数时,出现语法错误: new Function(function(){}) 产生 SyntaxError:意外标记( 但是,当我通过一个数字时,一切都很好: new Function(10) 为什么将函数传递给函数时会出现语法错误? 考虑到除了最后一个参数外,其他所有参数都是参数名,我不希望除了字符串以外的任何东西都能工作 我可以想象,语法错误是由于您在内部使用的JS引擎试图将

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

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);
我不希望出现语法错误