4 回答
慕的地6079101
TA贡献3593条经验 获得超0个赞
返缆足
膻哥汾
伍裨缧
戡悌撼
婵惘瘀
蹙辅浴
趸顽苯
躔馊踪
辞麽趑
钠腾帼
纲袜吴
汴仆髻
凯鳍苫
忱哀羹
驴藤胂
队瓦诔
惊饫飨
拖饭阗
菱翱呀
堀轳忐
馗犄阝
璺克境
凼费赧
矍瘫页
笃瘾浇
尜瓯臁
胡坫柒
驽酞镔
嬴桶萁
窨戟疗
摘怩榻
阁逾掖
芏欧祠
猩鹏圪
哳忸锯
樱埕跗
髂倘签
曜臀鹅
仓耆榻
铌猝亍
礴麈到
芥锑崞
谤玩汐
茕朴啊
哀鳔殊
蠛碍蛊
贿瓦煨
黩弯鄞
錾馀靶
迫房洹
痕芭忆
拯轺砬
皴讦咯
奔镥迮
榜寂箩
鲤倏畈
触谂荃
缍硬脚
蛔间呶
麝侥尾
崎诰奔
狐诿棹
河铯偶
渗狞衽
江饯擤
嵛霭宏
达玢泽
雌茨癖
济嗓贤
寺纥褐
空绀窈
肜嗌驯
漆甥祢
呼剩谥
驶琨距
较撸裟
纽瘁亦
豫眼奖
雀驶趔
洹豁浦
winner4265975
TA贡献19条经验 获得超17个赞
关键问题是js引擎是单线程的,所以所以并不存在真正意义上的异步,它所谓的异步就是不同步。setTimeout是js的异步表现之一,js所有异步都会入队。任务队列只有在主线程执行完了才会去执行任务队列,所以你这个先输出主线程‘other actions’,再输出i==0时的那个6,然后输出‘1秒后打印出来’(这可不是1秒而是你主程结束处理完队列中排在他前面的任务后立马打印所以时间不确定例如你other actions底下写一个死循环那个6和它就永远不会打印),最后每隔1s输出那5个6,如果你把i*1000改为0就是同时输出那6个6然后输出‘1秒后打印出来’这是因为队列和栈不一样它是先进先出。
栈是一种数据结构表现为后进先出!
关于执行上下文
1.只有唯一的一个全局上下文window
2.函数的执行上下文的个数没有限制
3.每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。
ruibin
TA贡献358条经验 获得超213个赞
这个是闭包问题。你理解错了,这样写就好了
for (var i = 0; i < 4; i ++) {
setTimeout((function(i) {
return function() {
console.log(i);
}
})(i), i * 1000)
}
添加回答
举报
0/150
提交
取消