JavaScript中有名字的函数和没有名字的函数之间的区别

42

1.

function abc(){
    alert("named function");
}

v/s

2.

function(){
    alert("Un-Named function");
}

请从初学者的角度进行解释。


2
有名字的可以用名字来引用。没有名字的则不能,它是“匿名的”。从功能上讲,它们是相同的。 - David
尝试在你的第二个例子中调用该函数。 - Bart
1
第二个是无效的语法,代码将抛出SyntaxError。要在没有名称的情况下使用它,需要在某些表达式中进行评估。 - user2736012
1
点赞 + 感谢您的提问 - McLan
这个怎么样:setTimeout(() => {}, time)? - aleXela
'()' 这里立即调用了该函数。这个 Stack Overflow 的答案 帮助了我。 - Anupam
2个回答

32

它们的工作方式完全相同,只是在运行它们的方式上有所不同。

例如 #1,您可以在任何时候使用 abc(); 再次调用它。而对于示例2,则需要将其作为参数传递给另一个函数,或者设置一个变量来存储它,就像这样:

var someFunction = function() {
    alert("Un-Named function");
}

以下是如何将其传递给另一个函数并运行它的方法。

// define it
function iRunOtherFunctions(otherFunction) {
    otherFunction.call(this);
}

// run it
iRunOtherFunctions(function() {
    alert("I'm inside another function");
});

如下所述,正如David所提到的,您也可以立即调用它:

(function() {
    alert("Called immediately");
})(); // note the () after the function.

9
为了完整性,匿名函数的另一个选项是立即调用(或自我调用)它: (function() { alert('something'); })(); - David
1
添加了更多的例子。谢谢David。 - Jordan
@Jordan,你的最后一个例子需要像(function(){})();(function(){}());这样包装函数。 - canon
@user2736012 不确定你在说什么。第二个例子运行良好。我已经修复了最后一个例子中缺失的括号。 - Jordan
@Jordan:我在谈论问题中的第二个示例。它的语法不正确,如所示。然后我谈到了你最后一个示例。在我的和cannon的评论之后,你进行了修正。 - user2736012
显示剩余4条评论

2

两者都可以用来达到相同的目的,但主要区别在于匿名函数不需要名称。匿名函数是在运行时动态声明的函数。它们被称为匿名函数,因为它们没有像普通函数一样被赋予名称。

请参考此链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接