我在整理闭包问题的时候,看到一道前端面试题
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);
}如果有其他解决方法,亲爱的朋友们可以评论补充
再补充一道闭包问题:
这道题可以较深理解闭包机制,解决这道题比较重要的是理解被保护的数据是哪一个,运行的顺序之类的,输出:我在这就不多做解释了,想一下很容易通的
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务