立即调用函数(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的由来。

猜你喜欢

转载自www.cnblogs.com/zhaoxinmei-123/p/8908428.html
今日推荐