在airbnb样式指南中,它指出几乎不需要IIFE。
https://github.com/airbnb/javascript/blob/master/README.md#functions
7.2将立即调用的函数表达式包装在括号中。埃斯林特:包裹的女人
为什么?立即调用的函数表达式是一个单元-将其及其包装的调用paren封装在parens中,以整洁的方式表示出来。 请注意,在一个到处都是模块的世界中,几乎不需要IIFE。
// immediately-invoked function expression (IIFE)
(function () {
console.log('Welcome to the Internet. Please follow me.');
}());
有人可以解释为什么会这样吗?我无法在任何地方找到解释,该解释说如果我在模块js脚本的顶层创建函数,则不会会位于全局命名空间中。
答案 0 :(得分:3)
IIFE的最常用用法是创建一个变量存在范围,以使变量不会成为全局变量。
模块具有自己的作用域,并且在模块顶层声明的变量的作用域是该模块的作用域,而不是全局的作用域。