立即执行函数

好久没发内容了:先发个简单的知识点

我们都知道for循环

for (var i = 0; i < 10; i++) {
    console.log(i)
}
//打印0-9

那么,如果换成这两种呢?

var a = null;
for (var i = 0; i < 10; i++) {
    a = function(){
        console.log(i);
    }
    a();
}
//打印0-9
var a = null;
for (var i = 0; i < 10; i++) {
    a = function(){
        console.log(i);
    }
}
a();
//打印10

为什么会有两种不同的结果,说到这儿大家都想到了立即执行函数

当函数在for循环内执行的时候,循环一次函数执行一次打印一次 i , 所以 i 的值也在变化。

反之,当函数在for循环外执行的时候, 函数是在for循环执行完毕后才执行, 此时的 i 的值也变为10了, 所以打印结果不同。

很多时候我们都需要在循环的过程中绑定函数,但却不立即执行,针对此种情况, 建议将var 改为 let;

for (var i = 0; i < elements.length; i++) {
    elements[i].onclick = function(){
        console.log(i)
    }
}
//点击不同的element(存放绑定点击事件的DOM),打印出来的是0-elements.length元素的索引

简单写一下,建议多做测试,这样才能更好理解

原文地址:https://www.cnblogs.com/xihailong/p/11897182.html