立即调用函数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();