立即执行函数

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)
}

你可能感兴趣的:(立即执行函数)