IIEF
全称:
立即执行函数表达式:IIFE(Immediately-invoked function expression)
在javascript(ES5)中,是没有块级作用域的概念的,例如
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i); //5
因为没有块级作用域的概念,因此,在 for 循环中声明的 i 变量实际上是一个全局变量,因此可以在全局环境中访问的到。块级作用域,也可以称为私有作用域。也就是说只在for循环的语句块中有定义,一旦循环结束,变量 i 就会被销毁。而在ES5中,我们主要通过匿名函数的方式来达到块级作用域的效果。
注意:javascript引擎规定,如果function关键字出现在行首,一律解释成函数声明语句;而函数声明后面是不能跟圆括号的(匿名函数是函数声明的一种)。然而,函数表达式的后面可以跟圆括号。所以可以将函数声明转换成函数表达式。
解决方法就是不要让function出现在行首,让引擎将其理解成一个表达式
(function(){
console.log(123);
}());
(function(){
console.log(123);
})();
(function keith() {
console.log(123);
})()
作用:
- 创建块级(私有)作用域,避免了多人开发中全局变量和函数的命名冲突。
- 隐藏实现
- 用它来编写JS模块