我试图将'命名函数'与'匿名函数'进行比较,但在一个简单的propgram中我得到了错误。我正在做的一切正确,不知道为什么会出现错误。有人可以帮忙吗?
<html>
<head></head>
<body>
<script>
//named Fn
function alpha(){
alert('hi');
}
//Anonymous Fn
function(){
alert('hello');
}
//IIFE
(function (){
alert('good day');
})();
alpha();
</script>
</body>
</html>
我希望“美好的一天”和“喜欢”能够得到提醒,但却会出现错误。
注意:我读匿名函数是一个没有名字所以写的 第二个功能没有名字。请有人将正确的代码段粘贴为 我不知道为什么这是错的
function(){ <------------------- A function without name.
答案 0 :(得分:4)
您无法真正声明匿名函数。当需要它时,你需要使用它。你有:
function(){
alert('hello');
}
因为你还没有命名它,所以总会抛出一个错误。如果你把它附加到适合匿名功能的东西你就可以了。如:
setTimeout(function(){
alert('hello');
}, 500);
所以您修改后的代码片段如下所示:
//named Fn
function alpha(){
alert('hi');
}
//Anonymous Fn
setTimeout(function(){
alert('hello');
}, 500);
//IIFE
(function (){
alert('good day');
})();
alpha();
&#13;
你也可以把它变成像这样的IIFE:
//named Fn
function alpha(){
alert('hi');
}
//Anonymous Fn
(function(){
alert('hello');
})();
//IIFE
(function (){
alert('good day');
})();
alpha();
&#13;
答案 1 :(得分:1)
您只能将hello
之类的匿名函数编写为表达式 - 也就是说,在解释器期望值的位置,例如作为括号内部,作为另一个函数的参数。否则,解释器会尝试将其解析为函数声明(其函数名称作为var
被提升) - 但没有名称,这是不可能的,因为那里&#39 ;什么都不提取作为名称,作为变量提升,并分配给。
解决方案是将匿名函数放在括号内:
//named Fn
function alpha(){
alert('hi');
}
//Anonymous Fn
(function(){
alert('hello');
});
//IIFE
(function (){
alert('good day');
})();
alpha();
&#13;
答案 2 :(得分:1)
您可以将javascript代码复制粘贴到浏览器的控制台(开发者工具)中。
在Firefox上,您将收到以下错误:
SyntaxError: function statement requires a name [Learn More]
点击[了解详情],您将转到relevant documentation。
函数语句(或函数声明)需要一个名称,这个 不会工作:
function () { return 'Hello world'; } // SyntaxError: function statement requires a name
您可以改为使用函数表达式(赋值):
var greet = function() { return 'Hello world'; };