为何要给IIFE的函数声明加括号?两种写法有何差异?
两种IIFE写法的区别
你测试时两种写法都能正常运行,是因为在赋值语句的右侧,JavaScript会自动把function () {}识别成函数表达式,而非函数声明,所以加不加括号都能执行。但换个场景,两者的差异就会显现:
核心本质:函数声明与函数表达式的语法规则
JavaScript默认会把以function开头的代码解析成函数声明,而函数声明是不能直接跟()执行的——比如你直接写:
// 会报错:Uncaught SyntaxError: Unexpected token ')' function () { console.log('测试'); }();
这是因为引擎会把这段代码当成一个没有名称的函数声明,后面的()属于非法语法。
而用括号(function(){})包裹,是为了强制让JavaScript把这段代码解析成函数表达式,不管放在什么位置都能正确执行。
场景差异举例
- 在赋值、函数传参等表达式上下文中:两种写法效果完全一致;
- 在全局/代码块顶层直接执行匿名函数:必须用括号(或
!function(){}()这类方式)将其转为表达式,否则会触发语法错误。
总结
加括号是更稳妥的通用写法,能避免因上下文不同导致的语法问题,也是前端社区约定俗成的IIFE规范写法。
内容的提问来源于stack exchange,提问作者Syed Faheem
相关产品推荐
相关产品推荐

