2017年3月20日月曜日

setTimeout(func,0)を複数回連続実行した場合のfuncの実行順

setTimeoutを使うと任意の関数を任意の待ち時間後に実行させるよう予約できますが、以下のようにした場合実行順は予約順になるのか確認しました。

setTimeout(funcA,0)
setTimeout(funcB,0)
setTimeout(funcC,0)

結論としては、予約順でした。
試験結果


試験ソース
<html>
<title>setTimeout</title>
<body></body>
<script>
resizeTo(200,300)
for(var i=0;i<100;i++){
var f=function(){
var div=document.createElement('div')
document.body.insertBefore(div)
div.innerText = arguments.callee.num
}
f.num = i
setTimeout(f,0)
}
document.body.onclick=function(){
var arr=document.getElementsByTagName('div')
for(var i=0,L=arr.length;i<L;i++){
if(arr[i].innerText != i){return document.title = '順不同['+i+']'}
}
document.title = 'ok'
}
</script>
</html>

0 件のコメント:

コメントを投稿