IIFE立即调用函数表达式

1,182 阅读2分钟

一、定义

IIFE(立即调用函数表达式) 是一个在定义时就会立即执行的JS函数。

(function (){
  statements
})()

这是一个被称为自执行匿名函数的设计模式,主要包含两部分:

  1. 圆括号运算符里面是一个匿名函数,拥有独立的语法作用域

特点:避免外界访问IIFE中的变量,不会污染全局作用域

  1. 再一次使用()创建一个立即执行的表达式,JS引擎到此将直接执行函数;

二、示例

示例1:

  1. 当函数变成立即执行函数表达式时,表达式中的变量不能从外部访问
(function(){
  var name = "leaf";
})()

name//抛出错误,name is not defined
  1. 将IIFE分配给一个变量,不是存储IIFE本身,而是存储IIFE执行后返回的结果。
var result = (function(){
  var name = "leaf";
  return leaf
})();

result;//"leaf"

立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,如果函数名称与内部变量名称冲突,就会永远执行函数本身,所以下面的结果输出是函数本身。

示例2

判断输出结果,并且解释原因?

var a = 1;        
(function a () {            
    a = 2;            
    console.log(a);        
})();

//输出结果
ƒ a () {
           a = 2;
           console.log(a);
       }

如果将函数名字改一下,比如改为 x:

var a = 1;        
(function x () {            
    a = 2;            
    console.log(a);        
})();
//输出结果:2

函数表达式中的函数名称,只有自己独立的作用域可以拿到,不会影响全局:

var a = 1;        
(function a () {            
    a = 2;            
    console.log(window.a);        
})();
// 1
var a = 1;        
(function x () {            
    a = 2;            
    console.log(a);        
})();
// 2

立即调用的函数表达式里面的this根据浏览器环境决定,如果在浏览器中指向window:

(function(){
  console.log(this)//这里的this指向window
})()

参考资料:

MDN文档:IIFE立即调用函数表达式