IIFE
Immediately Invoked Function Expression 类似于函数声明,但由于被包含在括号中,所以会被解释为函数表达式。
- ES5 尚未支持块级作用域,使用IIFE 模拟块级作用域是相当普遍的。可以用它锁定参数值(for 循环中的i)。在for 循环的头部直接定义了变量i,通常是因为只想在for 循环内部的上下文中使用i,而忽略了i 会被绑定在外部作用域(函数或全局)中的事实。
- 将window 对象的引用传递进去,但将参数命名为global,有助于改进代码风格(变量更加清晰)。
var a = 2
(function IIFE(global) {
var a = 3
console.log(a) // 3
console.log(global.a) // 2
})(window)
console.log(a) // 2
- 倒置代码的运行顺序,将需要运行的函数放在第二位,在IIFE 执行之后当作参数传递进去。这种模式在UMD(Universal Module Definition)项目中被广泛使用。
var a = 2
(function IIFE(def) {
def(window)
})(function def(global) {
var a = 3
console.log(a) // 3
console.log(global.a) // 2
})