1分钟了解 IIFE

1. 概念

IIFE(Immediately-Invoked Function Expression)指的是立即执行函数或者立即调用的函数表达式,即声明的同时就要调用。

普通函数声明:

function a(){
  return 5
};
a();

IIFE:

(function a(){
  return 5
})();

由以上对比可以看出 IIFE 主要包含两部分。

第一部分是包围在圆括号运算符 () 里的一个匿名函数,这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。

第二部分再一次使用 () 创建了一个立即执行函数表达式,JavaScript 引擎到此将直接执行函数。

2. 作用

那么为什么要使用 IIFE 呢,有什么作用呢?

IIFE 是为了弥补 JavaScript 在 scope 作用域方面的缺陷。JS 中的函数作用域只有全局作用域和函数作用域。ES6 之后才有了块级作用域。所以作用域的隔离只能通过 function。而有些函数只需要执行一次,所以名字都可以省了。

IIFE 的作用如下:

  • 避免作用域命名污染
  • 提升性能(减少了对作用域的查找)
  • 避免全局命名冲突
  • 保存闭包状态

3. 应用场景

任何需要作用域隔离的场景都可以使用 IIFE。

比如单例模式:

var myModule = (function module(){
  var someThing = "123";
  var otherThing = [1,2,3];

  function doSomeThing(){
    console.log(someThing);
  }

  function doOtherThing(){
    console.log(otherThing);
  }

  return {
    doSomeThing:doSomeThing,
    doOtherThing:doOtherThing
  }
})();

myModule.doSomeThing();
myModule.doOtherThing();

4. 总结

  • 创建块级(私有)作用域,避免变量污染和命名冲突。
  • IIFE 中定义的任何变量和函数,都会在执行结束时被销毁,减少闭包占用的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值