刀刀网
您的当前位置:首页关于闭包问题的详细介绍(二)

关于闭包问题的详细介绍(二)

来源:刀刀网


我在整理闭包问题的时候,看到一道前端面试题
for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 0); }
了解 js 的异步机制的都知道,
输出结果是: 10 10 10 ... 10
然后面试官又问 如果希望得到的是0 1 2 ... 9,如何能够解决这个问题

我脑海想到的第一个解决方法就是用let代替var使for形成块级作用域;

第二个解决方法,使setTimeout函数立即执行,形成同步输出:

for (var i=0; i < 10; i++) {
 (function (temp) {
 setTimeout(function() {
 console.log(temp);
 }, 0);
 })(i);
}

如果有其他解决方法,亲爱的朋友们可以评论补充

再补充一道闭包问题:

这道题可以较深理解闭包机制,解决这道题比较重要的是理解被保护的数据是哪一个,运行的顺序之类的,
输出:
我在这就不多做解释了,想一下很容易通的


 
显示全文