我们经常发现有些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来控制输出的顺序,以便能够看到每个值的输出结果。