IIFE

32 阅读1分钟

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
 })