立即执行函数
这是一个被称为“自执行匿名函数”的设计模式。主要包括:
第一部分:包围在圆括号运算符()
里的一个匿名函数。这个函数拥有独立的词法作用域,这不仅避免了外界访问此IIFE中的变量,而且又不会污染全局作用域。
第二部分:再次使用()
创建了一个立即执行函数表达式,JS引擎到此将直接执行函数。
IIFE的作用
1. 创建作用域:内部保存一些大量的代码以防止命名冲突
2. 一些库的外层用这种形式包起来防止作用域污染
3. 运行一些只执行一次的代码
(function(){
var module = require('module');
module.setup();
module.run();
})();
4. 用闭包保存状态
var elems = document.getElementsByTagName('a');
for(var i=0;i<elems.length;i++){
elems[i].addEventListener('click',function(e){
e.preventDefault();
alert('I am link #'+ i);
},'false');
}
点击页面标签时,实际并不是弹出每个具体的i
的,而是elems.length
,因为每个a
监听器中引用的i
都是同一个作用域的。
var elems = document.getElementsByTagName('a');
for(var i=0;i<elems.length;i++){
(function(lockedInIndex){
elems[i].addEventListener('click',function(e){
e.preventDefault();
alert('I am link #' + lockedInIndex);
},'false');
})(i);
}
点击页面标签的时候,每一个i
传入一个IIFE,IIFE形成单独一个作用域保存了当时的i
值,所以点击a
标签,可以弹出不同的i
值。