知识卡片
IIFE是块级作用域缺失时代的隔离手段
内容
JavaScript没有块级作用域,任何变量声明不管写在if、for的花括号内多深,只要不在函数里就都会污染全局命名空间;两段独立的脚本一旦声明了同名的顶层变量就会互相覆盖。唯一能制造出一块隔离作用域的手段是把代码包进一个函数,再立即调用它——即立即执行函数表达式(IIFE):(function(){ /*模块代码*/ }()),函数体内声明的一切变量在函数调用结束的瞬间也随之从外部世界彻底消失,不留一丝全局痕迹。这不是审美选择,而是在没有块级作用域、没有模块系统的年代里,唯一能实现”这段代码只在这里生效”的语言原生机制,后来的模块化方案在语义上都是对这个技巧的重新包装。
参考来源
《JavaScript权威指南(原书第6版)》第8章《函数》