首先是一道前端经典闭包面试题。
for(var i = 0;i<5;i++){
setTimeout(()=>{
console.log(i)
},1000*i)
}
这题大家都知道答案是每隔1秒打出5。
然后面试官让改成每隔1秒输出正确数字,你知道使用闭包:
function a(j){
setTimeout(()=>{
console.log(j)
},1000*j)
}
for(var i = 0;i<5;i++){
a(i)
}
但是这样的做法只是使用函数作用域保存了i的值,让定时器执行回调时所找到的变量值是每次循环对应的值,而闭包的作用是让函数外部间接访问到函数内部的值。
所以简单来说我觉得这道题不是闭包的作用,而仅仅是函数作用域的作用。
不知道我的理解对不对。
至尊宝的传说
慕娘9325324
慕森王
万千封印
SMILET
holdtom
烙印99
相关分类