立即执行函数的作用

我们经常发现有些js代码,for循环中使用立即执行函数。这是为什么呢?如果不使用立即执行函数的话有什么后果?

其实啊,在for循环中使用「立即执行函数」可以解决javascript中作用域的问题。

蓝天白云

我们都知道,js是没有「块级作用域」的,它只有「函数作用域」。这就会导致for循环中定义的变量会泄露到全局作用域中,这可能会导致不可预期的后果。

解决之策就是,我们使用「立即执行函数」,「立即执行函数」可以创建一个新的作用域,将变量封装在其中,从而避免了变量的泄露问题。

来个代码示例吧,下面就是一个使用立即执行函数的for循环示例:

for (var i = 0; i < 5; i++) {
  (function(j) {
    setTimeout(function() {
      console.log(j);
    }, j*1000);
  })(i);
}

在这个例子中,我们巧妙地使用了立即执行函数将变量i封装在了一个新的作用域中,成功避免了变量泄露的问题。

在每次循环中,我们传递了变量i的值作为参数j,然后在setTimeout回调函数中使用j的值。

由于setTimeout是异步执行的,所以我们使用了j*1000来控制输出的顺序,以便能够看到每个值的输出结果。