(function a(){
var b= 3;
console.log(‘c’);
})();
console.log(a); // ReferenceError
函数表达式
IIFE(Immediately Invoked Function Expression)是立即调用函数表达式,而不是函数声明,因为函数声明在function之前不加其他字符。IIFE要将function括起来,(function …)()看做一整个表达式
作用域
(function a(){…})是一个独立的作用域,只能在…内访问a,在函数表达式外部不能访问。此外,…内的变量,如b也不能在外部访问。
因此可以用IIFE来做模块化,各个函数表达式内部内容互不干扰
IIFE也可避免污染全局变量,因为外部不会访问到IIFE的任何变量命名