Variable Scope with setTimeout & clearTimeout
在研究变量范围时,我似乎无法弄清一件事。 例如两个元素。 如果第一个悬停在其上方,则其同级出现。 如果将鼠标移出初始元素,则兄弟姐妹将通过存储在变量表达式中的setTimeout消失。 如果碰巧将鼠标悬停在同级上,则会调用clearTimeout函数,并将其设置为在回调中淡出。
关于范围,我不了解的是在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var timer; $('p:eq(1)').hide(); $('p').first().hover(function() { $(this).next().fadeIn(); }, function() { timer = setTimeout(function() { $('p:eq(1)').fadeOut(); }, 1000); // console.log(timer); }); $('p:eq(1)').hover(function() { clearTimeout(timer); }, function() { $('p:eq(1)').fadeOut(1000); }); |
函数
因此,当您设置超时时,它将返回一个特定的ID供参考,因此
由于您在全局范围内设置了
感谢您提出一个教我一些问题的问题! (我不知道
很简单。计时器本身通过您在与兄弟事件绑定相同的作用域中定义的'timer'变量存储在内存中。 因此,可以通过在任何同级或子级作用域中直接使用" timer"调用timer变量来访问它。 您是否在函数中声明了" var timer"部分,如下所示:
1 2 3 4 5 | function() { var timer; timer = setTimeout(function() { $('p:eq(1)').fadeOut(); }, 1000); |
结果将是clearTimeout(timer)不在范围内,并导致未知的成员错误。