-
我在循环里用 var 注册了几个回调,本想让它们各自打印 0、1、2,结果它们齐刷刷全打印了 3,我盯着这个诡异的结果排查了大半天的深度复盘
我在 for 循环里用 var 注册了几个 setTimeout 回调,本想让它们各自打印 0、1、2,结果它们齐刷刷全打印了 3。这几个回调明明在 i 不同时刻创建,怎么全记住了循环结束后的 3?深究才懂是两个机制叠加:一,var 是函数作用域不是块作用域,整个循环只有一个共享的 i;二,闭包捕获的是变量(引用)而非那一刻的值。加上回调是异步延迟执行的——执行时循环早跑完、共享的 i 已是 3,…- 0
- 0
循环
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!

