私は jQuery を初めて使用し、コンソール ログにこの "end of if" 行が表示される理由がわかりません。もし toggleBox が "if の終わり" コンソール ログ行の直前で自分自身を呼び出した場合、console.log() 関数はどのように処理されますか?
1 行目と 2 行目が繰り返されるように見えますが、なぜか 3 行目が実行されています。飛び跳ねているだけのようです。toggleBox の呼び出しは、実際には box.fadeToggle が呼び出される直前にそれ自体に戻り、if ブロックを終了してから、何らかの理由で box.fadeToggle に戻りますか?
$(document).ready(function() {
var box = $("#box");
var para = $("p");
var i = 0;
para.text(i);
function toggleBox(i) {
console.log($.now() + " 1. entering toggleBox. i=" + i);
box.fadeToggle(2000, function() {
console.log($.now() + " 2. after fade time. i=" + i);
i++;
if (i < 4) {
para.text(i);
toggleBox(i);
console.log($.now() + " 3. end of if. i=" + i);
};
});
};
toggleBox(i);
});
コンソール出力:
69387 1. トグルボックスに入ります。i=0
71398 2. フェード時間の後。i=0
71399 1. トグルボックスに入ります。i=1
71400 3. if の終わり。i=1
73396 2. フェード時間の後。i=1
73397 1. トグルボックスに入ります。i=2
73397 3. if の終わり。i=2
75398 2. フェード時間の後。i=2
75399 1. トグルボックスに入ります。i=3
75399 3. if の終わり。i=3
77399 2. フェード時間の後。i=3