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的好处优点:

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

4、应用场景:

  1. 一般用于框架、插件等场景。


以上就是关于什么是IIFE,IIFE有什么优点?的全部内容,欢迎大家一起探讨交流

微信交流(备注:前端)