为何回归;不停止功能?

时间:2014-06-05 03:01:32

标签: javascript

这是我简化的代码,但问题的本质是相同的:

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()的返回值? (即相当于询问函数是否可以作为其超函数返回)

3 个答案:

答案 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必须作为语句的开头出现,不能分配。