4 回答

TA贡献3593条经验 获得超1个赞

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.每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。

TA贡献358条经验 获得超213个赞
这个是闭包问题。你理解错了,这样写就好了
for (var i = 0; i < 4; i ++) {
setTimeout((function(i) {
return function() {
console.log(i);
}
})(i), i * 1000)
}
添加回答
举报