立即调用函数IIFE( the Immediately Invoked Function Expression )

JavaScript 中的一个常见模式是在声明函数后立即执行:

(function () {
  console.log("Chirp, chirp!");
})();

这是一个立即执行并立即输出结果为“Chirp, chirp!”的匿名函数表达式。

需要注意的是,该函数没有名称,也没有存储在变量中。

函数表达式末尾的两个括号 () 导致它立即被执行或调用。

这种模式称为立即调用函数表达式IIFE

立即调用的函数表达式 (IIFE)通常用于将相关功能整合到单个对象模块中。

比如我们定义了两个函数:

function glideMixin(obj) {
  obj.glide = function() {
    console.log("Gliding on the water");
  };
}
function flyMixin(obj) {
  obj.fly = function() {
    console.log("Flying, wooosh!");
  };
}
我们可以将这两个函数整合到一个模块中:
let motionModule = (function () {
  return {
    glideMixin: function(obj) {
      obj.glide = function() {
        console.log("Gliding on the water");
      };
    },
    flyMixin: function(obj) {
      obj.fly = function() {
        console.log("Flying, wooosh!");
      };
    }
  }
})();

现在,您有一个立即调用的函数表达式 (IIFE),它返回一个对象 motionModule

这个返回的对象包含作为对象属性的所有 mixin 行为。

模块模式的优点是所有的动作行为都可以打包成一个对象,可以被代码的其它部分使用。

使用方法如下:

motionModule.glideMixin(duck);
duck.glide();
 
posted @ 2022-07-21 09:44  Fontaine  阅读(129)  评论(0)    收藏  举报