编写匿名函数会出错

时间:2018-04-28 03:13:54

标签: javascript anonymous-function

我试图将'命名函数'与'匿名函数'进行比较,但在一个简单的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.

3 个答案:

答案 0 :(得分:4)

您无法真正声明匿名函数。当需要它时,你需要使用它。你有:

function(){
  alert('hello');
}

因为你还没有命名它,所以总会抛出一个错误。如果你把它附加到适合匿名功能的东西你就可以了。如:

setTimeout(function(){
  alert('hello');
}, 500);

所以您修改后的代码片段如下所示:

&#13;
&#13;
//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
setTimeout(function(){
  alert('hello');
}, 500);

//IIFE
(function (){
  alert('good day');
})();

alpha(); 
&#13;
&#13;
&#13;

你也可以把它变成像这样的IIFE:

&#13;
&#13;
//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
(function(){
  alert('hello');
})();

//IIFE
(function (){
  alert('good day');
})();

alpha();
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您只能将hello之类的匿名函数编写为表达式 - 也就是说,在解释器期望的位置,例如作为括号内部,作为另一个函数的参数。否则,解释器会尝试将其解析为函数声明(其函数名称作为var被提升) - 但没有名称,这是不可能的,因为那里&#39 ;什么都不提取作为名称,作为变量提升,并分配给。

解决方案是将匿名函数放在括号内:

&#13;
&#13;
//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
(function(){
  alert('hello');
});

//IIFE
(function (){
  alert('good day');
})();

alpha(); 
&#13;
&#13;
&#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';
};
相关问题