1、立即执行函数是什么?
声明一个匿名函数,立马调用这个匿名函数。下面就是一个立即执行函数:
(function() {console.log('我就是立即执行函数')})()
2、它有什么用呢?
它的作用就是创建一个独立的作用域,不让外面访问,避免变量污染。
下面以一个常见的面试题为例:
var lis = document.getElementsByTagName('li')
for (var i=0; i<10; i++) {
lis[i].onClick = function() {console.log(i)}
}
/* 只会打印出很多10,为什么呢? 因为 i 声明提前之后,它的作用域就是最外面的作用域,而不是给每个 li 都单独创建一个作用域 i。那么怎么让它打印出0,1。。。这些数字呢?这时候就该立即执行函数出场了,修改如下
*/
var lis = document.getElementsByTagName('li')
for (var i=0; i<10; i++) {
!(function (i) {
lis[i].onClick = function () {
console.log(i)
}
})(i)
}