Javascriptの同期、非同期、コールバックの実行順序


試験問題をする時、経典的なテーマに出会いました.setTimeoutの出力結果について、まず一つのテーマを見にきます.
for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}
console.log(i);
出力の結果は何ですか?第一の可能な答え:0 1、2、4、5、5、5、5、5、5、5、5、5、1秒間隔で出力されます.第二の結果は正しいです.まず一つのパスワードまたは方法を見てください.同期優先、非同期クッション、バッククッションを公式で表現すると、同期=>非同期=>フィードバックは今このパスワードに基づいて分析します.(同期優先)2)forサイクルの中にsetTimeoutフィードバックがあります.彼は下地の存在です.最後に実行するしかないです.(バッククッション)では、なぜ私たちが最初に出力したのは5ですか?forサイクルは先に実行されますが、setTimeoutに転送されません.forサイクルが終わったら、setTimeoutに転送されます.外部のsolieは5を印刷します.forサイクルが完了したからです.