扫码关注官方订阅号
for(i=0;i<10;i++){ setTimeout("console.log(i)",0); }
为什么输出结果是十个10呢?还有,前面先输出的304是什么?每次输出那个值都不一样。
学习是最好的投资!
setTimeout是异步的,在这里,当for循环结束之后才开始执行队列中的代码,那for结束之后 i是多少呢? 10.解决方法是闭包,这篇文章有详细解读你的例子
i
timeoutID: 标示当前的计时器,可以用于清除该定时器 window.clearTimeout(timeoutID)
timeoutID
window.clearTimeout(timeoutID)
每循环一次就注册一个延迟函数,js是单线程的,在循环中注册延迟函数就可能会发生这种情况,循环先发生,延迟函数要等到循环完了才能执行,循环完了取到的i自然是10咯。每生成一个timeout都会有一个id,304是最后一个计时器的id如果想实现这样的功能,可以用闭包来处理,下面的函数就可以输出1到10了
for(i=0;i<10;i++){ setTimeout( (function(i){ return function(){ console.log(i) } })(i), 0); }
不是我说,这种闭包题几乎一周一次,代码结构都是一样的...
设置setTimeout(callback,0),callback 会在下一次轮训中进行
细想一下,for循环每次都setTimeout,把回调传入到事件队列去,等循环结束了 ,事件队列开始处理这些传进来的回调,这个时候i在for循环以后就变成10了,这个时候每一个回调都是console.log(10);
for
setTimeout
console.log(10)
还有 你后面那个304,你应该知道setTimeout函数的具体使用>>
304 应该是你那时候运行最后一个settimeout时返回的timeout 的timeoutID(用来clearTimeout的。)
timeout 是在 for 循环完毕后才开始执行的.详见各种解析计时器的文章.
因为执行了10次这个任务。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
为什么输出结果是十个10呢?
setTimeout是异步的,在这里,当for循环结束之后才开始执行队列中的代码,那for结束之后
i是多少呢? 10.解决方法是闭包,这篇文章有详细解读你的例子
前面先输出的304是什么?
timeoutID: 标示当前的计时器,可以用于清除该定时器window.clearTimeout(timeoutID)每循环一次就注册一个延迟函数,js是单线程的,在循环中注册延迟函数就可能会发生这种情况,循环先发生,延迟函数要等到循环完了才能执行,循环完了取到的i自然是10咯。每生成一个timeout都会有一个id,304是最后一个计时器的id
如果想实现这样的功能,可以用闭包来处理,下面的函数就可以输出1到10了
不是我说,这种闭包题几乎一周一次,代码结构都是一样的...
设置setTimeout(callback,0),callback 会在下一次轮训中进行
细想一下,
for循环每次都setTimeout,把回调传入到事件队列去,等循环结束了 ,事件队列开始处理这些传进来的回调,这个时候i在for循环以后就变成10了,这个时候每一个回调都是console.log(10);还有 你后面那个304,你应该知道setTimeout函数的具体使用>>
304 应该是你那时候运行最后一个settimeout时返回的timeout 的timeoutID(用来clearTimeout的。)
timeout 是在 for 循环完毕后才开始执行的.
详见各种解析计时器的文章.
因为执行了10次这个任务。