一个普遍的进阶用法

var a = 2;
(function IIFE(global){
  var a = 3;
  console.log(a);
  console.log(global.a);
})(window)
console.log(a);

避免undefined被错误覆盖


传参时传入一个函数进去

var a = 2;
(function IIFE(b){
  var a = 3;
  b();//5
  console.log(a);//3
})(function def(){var a=3;a=a+2;console.log(a)})
console.log(a);//2

说是在UMD项目中广泛使用。