立即调用函数(IIFE)

Posted 梅梅姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立即调用函数(IIFE)相关的知识,希望对你有一定的参考价值。

定义:

IIFE:立即调用的函数表达式,声明函数的同时立即调用这个函数。

 


 

语法:

IIFE的常用写法:这两种写法的作用相同,只是表现形式不同而已,()只是起了自执行的作用

(function(){......})() 把函数当作表达式解析,然后执行解析后的函数[相当于 var a = function(){}; a(); a得到的是函数]

(function(){......}())是把函数表达式和执行当作语句直接执行[相当于 var a = function(){}(); a得到的是结果]

传统写法:

声明:function func(){......}

调用:func();

IIFE其他写法:

!function foo() {...}();

+function foo() {...}();

 


 

IIFE和传统写法的区别:

IIFE:是用一个()把函数声明括起来了,让js编译器知道,这是一个需要立即执行的函数;

传统:声明函数之后,只有在调用的时候才会执行函数,并且直接污染全局命名空间。

说明:所谓不去污染全局命名空间,是因为 IIFE 创建了一个新的函数作用域,你真正的业务代码被封装在其中,自然就不会触碰到全局对象了。如果你需要全局对象,那就 pass 给 IIFE:

void function (global) {
    // 在这里,global 就是全局对象了
}(this)    // 在浏览器里,this 就是 window 对象

 


 

为什么要使用IIFE:

  在js中只有function才能实现作用域的隔离,如果要将一段代码中的变量、函数等的定义隔离出来,只能将这段代码封装到一个函数中。

       在我们通常的理解中,将代码封装到函数中的目的是为了复用,在JS中,当然声明函数的目的在大多数情况下也是为了复用,但是JS迫于作用域控制手段的贫乏,我们也经常看到只使用一次的函数:这通常的目的是为了隔离作用域,既然只使用一次,那么立即执行好了,既然只使用一次,函数的名字也省掉了,这就是IIFE的由来。

 

以上是关于立即调用函数(IIFE)的主要内容,如果未能解决你的问题,请参考以下文章

理解JavaScript的立即调用函数表达式(IIFE)

立即调用的函数表达式(IIFE)

javascript 理解立即调用的函数表达式(IIFE)

JS-立即执行函数表达式(IIFE)

JS-立即执行函数表达式(IIFE)

c_cpp C ++立即调用函数表达式(IIFE)