【发布时间】:2018-06-25 16:43:39
【问题描述】:
立即调用函数表达式 (defined and explained here) 通常写成...
(function() { /* code */ })();
Ben Alman 在上面的文章中添加了以下评论:
向函数表达式添加标识符(从而创建命名函数表达式)在调试时非常有用。
命名您的 IIFE 有一个调试优势,例如...
(function myComponentIIFE(){ /* code */ })();
如果有一些优势,那么命名所有其他匿名的 IIFE 似乎应该是一种常见的做法。 IIFE 通常是匿名的有什么原因吗?匿名函数是否以不同的方式处理以使其具有某些优势?
【问题讨论】:
-
您打算重用该功能吗?为什么要给一个你不会再次使用并且不希望其他人能够使用的函数留下一个悬空名称?
-
好处在于代码可读性和可读堆栈跟踪。与
(function(){ (function(){ shouldThrowError(); })(); })();相比,在控制台中尝试(function outerComponentIIFE(){ (function innerComponentIIFE(){ shouldThrowError(); })(); })(); -
除非您不必支持旧的 IE
-
@Teemu 想详细说明“匿名函数表达式和命名函数表达式之间没有区别”并提供答案参考?
-
唯一的区别是命名函数在引用自身的函数内部创建一个绑定。在功能方面没有任何区别。
标签: javascript ecmascript-6 iife