我是jQuery的新手,我不明白为什么我在控制台日志中看到这个“if of end”行。如果toggleBox在“if of if”控制台日志行之前调用自身,那么console.log()函数是如何处理的?
似乎第1行和第2行只会重复,但不知何故,第3行正在运行。看起来它只是跳来跳去。在调用box.fadeToggle之前,toggleBox调用是否实际上会跳回到自身,完成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.输入toggleBox。 I = 0
71398 2.褪色后。 i = 0
71399 1.输入toggleBox。 i = 1
71400 3.如果结束。 i = 1
73396 2.褪色后。 I = 1
73397 1.输入toggleBox。 I = 2
73397 3. if的结尾。 I = 2
75398 2.褪色后。 I = 2
75399 1.进入toggleBox。 I = 3
75399 3.如果结束。 I = 3
77399 2.褪色后。 i = 3
答案 0 :(得分:0)
box.fadeToggle(2000; function
启动fadeToggle并注册回调然后返回。这意味着toggleBox(i);
会立即返回而不会更深入,因此执行以下console.log
。
你必须意识到这不是一个真正的递归,因为回调将在动画之后才被调用,从而让当前指令流继续。任何异步操作都会出现同样的现象。