2012-07-02 45 views
0

我想知道,它是如何工作的setInterval功能的执行机制。什么是setInterval函数

第一:我有简单的例子(Live demo
此外下面的代码。

HTML:

<div id="elem"></div> 
<div id="count"></div> 
<div id="Timer"></div> 

的Javascript:

var s = 10; 
var count = 0; 
if (s == 20) alert("S= 20"); 
var timer = setInterval(function() { 
    if (count < 50) { 
     count++; 
     document.getElementById('count').innerHTML = "Counter: " + count; 
    } 
    else { 
     clearInterval(timer); 
     document.getElementById('count').innerHTML = "Counter: End Of Count"; 
    } 
}, 50); 
s = 20; 
document.getElementById('elem').innerHTML = "variable 's': " + s; 
document.getElementById('Timer').innerHTML = "Timer value: " + timer; 
if (s == 20) alert("S= 20"); 

所有我想要的是怎样的功能,它的工作原理。
执行完函数代码后,它返回到首页的代码开始处,或者返回执行功能代码直到使用clearInterval函数。

有人请帮助我。

+1

正如你想知道底层javascript引擎是如何编写这个函数的?或者简单地说这个功能是什么,它是如何工作的?你的问题不是很清楚.. –

+0

我想知道它是如何工作 –

+1

https://developer.mozilla.org/En/Window.setInterval –

回答

0

在你的代码,你提供一个匿名函数setTimeout

提供给setInterval的匿名函数异步调用。在当前函数完成之前,匿名函数不能第一次运行。拨打setInterval(function() {...})的电话是注册您的匿名功能每50ms执行一次;它确实不是立即执行。

你的程序流程运行这样的:

set initial variables 
check if s == 20 
register (not execute) the anonymous function with setInterval 
set s = 20 
print results 
check if s == 20 
end of your code blcok 
... 
50ms later, the first call to your anonymous setTimeout function finally happens 
Repeatedly call the anonymous function every 50ms 

外卖点:如果你需要某些操作发生匿名函数完成后,把匿名函数本身内部的操作。在你的代码中,我怀疑你需要一些在setTimeout调用之后的行,并将它们放在你的匿名函数的else块中。

+0

**很好,这就是我想要的,谢谢你的帮助**,但我有两个有关同一主题的迷你问题。 **(1 - **,如果我们添加一个像'setInterval(function,100)'这样的普通函数,则遵循匿名函数的相同执行方式。**(2 - **)如何确保定时器('在使用'clearInterval'函数之后,setInterval'已被停止或清除 –

+0

1.正确,函数是匿名还是匿名,它们的表现都是一样的2.我不太明白你的'你在问这里,你似乎正确地使用了'clearInterval',你是否在问如何检查一段时间是否已被清除(例如,通过类似'isIntervalCleared')?没有这样的功能,恐怕 - 你你必须自己跟踪你的程序 – apsillers

+0

再次感谢您的帮助,我很抱歉如果我打扰你 –

0

的setInterval保持调用函数封闭,直到反复被clearinterval叫。延迟可以在几秒钟内给出1000 = 1秒,因为你给的50小的延时功能快速连续多次呼吁,直到它达到50限制

+0

当进入该功能,是继续执行代码,直到定时器完成然后退出,或每次进入功能退出等等 –

+0

这就是说输入一次执行代码然后出去,或者进入和退出多次实施代码 –

+0

即时通讯不清楚你上面提到的问题,整个页面开始加载,并且如果在整个页面加载之前达到延迟,setinterval开始执行封闭的函数。所以如果页面需要加载一段时间并且延迟已经过去,它将开始执行该函数并继续执行直到清除间隔被调用。 – unangelic

相关问题