1、名称解释:
IIFE: Immediately Invoked Function Expression,意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数。
2、存在的原因以及用法

在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);
})()
3、IIFE的好处优点:
- IIFE中定义的任何变量和函数,都会在执行结束时被销毁。适合做初始化工作。
- 创建块级(私有)作用域,避免了向全局作用域中添加变量和函数,因此也避免了多人开发中全局变量和函数的命名冲突。
- IIFE中定义的任何变量和函数,都会在执行结束时被销毁。这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域链了。
4、应用场景:
- 一般用于框架、插件等场景。
以上就是关于什么是IIFE,IIFE有什么优点?的全部内容,欢迎大家一起探讨交流
说的太好了 棒棒哒