写匿名函数报错

Writing anonymous function is giving error

我正在尝试将 'named function' 与 'anonymous function' 进行比较,但在一个简单的程序中我遇到了错误。我做的一切都是对的,不知道为什么会出现错误。有人可以帮忙吗?

<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>

我希望 'good day' 和 'hi' 收到警报,但收到错误消息。

Note: I read anonymous function is one without a name so wrote the second function without name. Please, someone paste correct snippet as I don't know why this is wrong

 function(){ <------------------- A function without name.

你不能真正声明一个匿名函数。您需要在需要时使用它。你有:

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(); 

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

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

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

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

alpha();

您只能将像您的 hello 这样的匿名函数编写为 表达式 - 也就是说,在解释器期望 的地方value,例如在括号内,作为另一个函数的参数。否则,解释器会尝试将其解析为函数 declaration(其函数名称被提升为 var)——但没有名称,这是不可能的,因为没有什么可提取的作为名称,提升为变量,并分配给。

解决办法就是将匿名函数放在括号内:

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

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

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

alpha(); 

您可以将 javascript 代码复制并粘贴到浏览器的控制台(开发人员工具)中。

在 Firefox 上,您将收到以下错误:

SyntaxError: function statement requires a name [Learn More]

点击 [了解更多],您将被引导至 relevant documentation

A function statement (or function declaration) requires a name, this won't work:

function () {
    return 'Hello world';
} // SyntaxError: function statement requires a name

You can use a function expression (assignment) instead:

var greet = function() {
    return 'Hello world';
};