什么是IIFE

立即执行函数表达式: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中,我们主要通过匿名函数的方式来达到块级作用域的效果。

//函数声明语句写法
function test(){};
test();

//函数表达式写法
var test = function(){};
test();

[注意]javascript引擎规定,如果function关键字出现在行首,一律解释成函数声明语句;而函数声明后面是不能跟圆括号的(匿名函数是函数声明的一种)。然而,函数表达式的后面可以跟圆括号。所以可以将函数声明转换成函数表达式。

所以,解决方法就是不要让function出现在行首,让引擎将其理解成一个表达式
最常用的两种办法

(function(){ 
    console.log(123);
}()); 

(function(){
    console.log(123);
 })(); 

(function keith() {
    console.log(123);
})()

总结IFEE的优点:
1.创建块级(私有)作用域,避免了向全局作用域中添加变量和函数,因此也避免了多人开发中全局变量和函数的命名冲突;
2.IIFE中定义的任何变量和函数,都会在执行结束时被销毁。这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域链了;

猜你喜欢

转载自blog.csdn.net/u013746071/article/details/80595596
今日推荐