这是我简化的代码,但问题的本质是相同的:
var counter=0;
function test(){
window.onclick="return;";
t.value=counter;
counter++;
setTimeout(test,1000);
}
t=document.createElement("textarea");
document.body.insertBefore(t, document.body.firstChild);
test();
设置一个计时器,但是,如您所见,单击窗口后时钟不会停止(即退出功能)。那么问题出在哪里?
修改:此问题的动机来自:Early exit from function?
编辑^ 2 :然后现在可以点击' onlick'触发test()的返回值? (即相当于询问函数是否可以作为其超函数返回)
答案 0 :(得分:2)
当您尝试拨打return
时,该功能早已退出。 JavaScript不会将自己投入时间机器并阻止setTimer
调用被执行。现在为时已晚。
您需要做的是取消计时器,为此,您必须保存一个句柄:
var counter = 0;
var timer;
function test(){
window.onclick = function() {
if (timer) { clearTimeout(timer) }
}
t.value=counter;
counter++;
timer = setTimeout(test,1000);
}
答案 1 :(得分:1)
每十分钟,你告诉你的妻子“如果你看到一个邮递员,什么都不做。”不出所料,当她看到邮递员时,她什么也没做。
基本上,你所做的是相同但不太安全的写作方式:
window.onclick = function() {
return;
}
即。当检测到点击时,它会执行一个除了返回之外什么都不做的功能。它与函数test
无关。
答案 2 :(得分:0)
声明中:
window.onclick="return;";
将字符串"return;"
分配给 window.onclick 属性,该属性将替换当前值(无论可能是什么)。
如果您的目的是结束 test 函数的执行,则需要return statement:
return;
return keyword必须作为语句的开头出现,不能分配。