Heim Web-Frontend js-Tutorial setTimeout和setInterval的区别你真的了解吗?_javascript技巧

setTimeout和setInterval的区别你真的了解吗?_javascript技巧

May 16, 2016 pm 06:08 PM
setinterval settimeout

甚至可能会错误的把两个实现定时调用的函数理解成了类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行的代码在你设定的一个时间点插入js引擎维护的一个代码队列中, 插入代码队列并不意味着你的代码就会立马执行的,理解这一点很重要. 而且setTimeout和setInterval还有点不一样.

先谈谈setTimeout

复制代码 代码如下:

function click() {
// code block1...
setTimeout(function() {
// process ...
}, 200);
// code block2
}

假设我们给一个button的onclick事件绑定了此方法, 当我们按下按钮后, 肯定先执行block1的内容, 然后运行到setTimeout的地方, setTimeout会告诉浏览器说, "200ms后我会插一段要执行的代码给你的队列中", 浏览器当然答应了(注意插入代码并不意味着立马执行), setTimeout代码运行后, 紧跟其后的block2代码开始执行, 这里就开始说明问题了, 如果block2的代码执行时间超过200ms, 那结果会是如何? 或许按照你之前的理解, 会理所当然的认为200ms一到, 你的process代码会立马执行...事实是, 在block2执行过程中(执行了200ms后)process代码被插入代码队列, 但一直要等click方法执行结束, 才会执行process代码段, 从代码队列上看process代码是在click后面的, 再加上js以单线程方式执行, 所以应该不难理解. 如果是另一种情况, block2代码执行的时间再看看setInterval
这里可能会存在两个问题:
1.时间间隔或许会跳过
2.时间间隔可能
复制代码 代码如下:

function click() {
// code block1...
setInterval(function() {
// process ...
}, 200);
// code block2
}

和上面一样我们假设通过一个click, 触发了setInterval以实现每隔一个时间段执行process代码

setTimeout和setInterval的区别你真的了解吗?_javascript技巧

比如onclick要300ms执行完, block1代码执行完, 在5ms时执行setInterval, 以此为一个时间点, 在205ms时插入process代码, click代码顺利结束, process代码开始执行(相当于图中的timer code), 然而process代码也执行了一个比较长的时间, 超过了接下来一个插入时间点405ms, 这样代码队列后又插入了一份process代码, process继续执行着, 而且超过了605ms这个插入时间点, 下面问题来, 可能你还会认为代码队列后面又会继续插入一份process代码...真实的情况是,由于代码队列中已经有了一份未执行的process代码, 所以605ms这个插入时间点将会被"无情"的跳过, 因为js引擎只允许有一份未执行的process代码, 说到这里不知道您是不是会豁然开朗呢...

为了这种情况你可以用一种更好的代码形式

复制代码 代码如下:

setTimeout(function(){
//processing
setTimeout(arguments.callee, interval);
}, interval);

这个估计稍微想一下, 就明白其中的好处了, 这样就不会产生时间点被跳过的问题内容就到这里, 希望能有所帮助, 可能我表达的不是很清楚如果觉得自己英语基础不错可以直接看

setTimeout和setInterval的区别你真的了解吗?_javascript技巧
里有关advanced Timers这节内容,  个人认为这本书真的很不错, 无论是想从零学起, 还是平日没事翻翻参考参考 都很不错, 作者是yahoo里很牛的一位前端开发工程师 : )

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen settimeout und setinterval? Was ist der Unterschied zwischen settimeout und setinterval? Aug 15, 2023 pm 02:06 PM

Der Unterschied zwischen settimeout und setInterval: 1. Triggerzeit, settimeout ist einmalig, es führt die Funktion einmal aus, nachdem die Verzögerungszeit eingestellt wurde, während setinterval sich wiederholt, es wird die Funktion wiederholt im festgelegten Zeitintervall ausführen , settimeout wird nur einmal ausgeführt und setinterval wird wiederholt ausgeführt, bis es abgebrochen wird.

Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen? Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen? Nov 18, 2023 pm 05:00 PM

Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen? In JavaScript ist die Funktion setInterval eine sehr nützliche Funktion, mit der ein Codeabschnitt regelmäßig ausgeführt werden kann. Mit der Funktion setInterval können wir bestimmten Code innerhalb eines bestimmten Zeitintervalls wiederholt ausführen. In diesem Artikel wird die Verwendung der setInterval-Funktion ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Die grundlegende Syntax der setInterval-Funktion lautet wie folgt: setInterv

So stoppen Sie setInterval So stoppen Sie setInterval Dec 11, 2023 am 11:39 AM

Sie können die Funktion „clearInterval“ verwenden, um einen von der Funktion „setInterval“ erstellten Timer zu stoppen. Die Funktion „setInterval“ gibt eine eindeutige Timer-ID zurück, die als Parameter an die Funktion „clearInterval“ übergeben werden kann, um die Ausführung des Timers zu stoppen.

So verwenden Sie die Window.setInterval()-Methode So verwenden Sie die Window.setInterval()-Methode Aug 31, 2023 am 09:33 AM

Die grundlegende Syntax der Window.setInterval()-Methode lautet „window.setInterval(function, delay)“, die Funktion ist die Funktion oder der Codeblock, die wiederholt ausgeführt werden soll, und die Verzögerung ist das Zeitintervall zwischen den einzelnen Ausführungen in Millisekunden. Bei dieser Methode handelt es sich um eine Methode in JavaScript, mit der eine bestimmte Funktion oder ein bestimmter Code zu einem geplanten Zeitpunkt wiederholt ausgeführt wird. Die Verwendung ist sehr einfach. Sie müssen lediglich die auszuführende Funktion oder den Codeblock und das Zeitintervall für die wiederholte Ausführung übergeben.

setInterval setInterval Aug 02, 2023 am 10:17 AM

Die setInterval-Funktion ist eine Timer-Funktion in JavaScript, mit der Sie ein Intervall festlegen und nach jedem Intervall einen bestimmten Code ausführen können. Dies ist sehr nützlich, wenn bestimmte Aufgaben regelmäßig verarbeitet werden müssen oder Seitenelemente in Echtzeit aktualisiert werden müssen Bei der Verwendung von setInterval treten Leistungs- und Zuverlässigkeitsprobleme auf, und bei Bedarf optimieren.

Detaillierte Erläuterung der Verwendung von setinterval Detaillierte Erläuterung der Verwendung von setinterval Sep 12, 2023 am 09:55 AM

Die Verwendung von setinterval ist „setInterval (Funktion, Verzögerung);“, „Funktion“ ist die auszuführende Funktion, die ein Funktionsausdruck oder eine Funktionsreferenz sein kann, und „Verzögerung“ ist das Zeitintervall zwischen der Ausführung von Funktionen in Millisekunden. setInterval ist eine Funktion in JavaScript, die zum periodischen Ausführen von Code verwendet wird. Sie akzeptiert eine Funktion und ein Zeitintervall als Parameter und führt die Funktion entsprechend dem angegebenen Zeitintervall wiederholt aus.

Was ist der Unterschied zwischen setTimeout() und setInterval() in JavaScript? Was ist der Unterschied zwischen setTimeout() und setInterval() in JavaScript? Sep 01, 2023 pm 03:01 PM

setTimeout(function,duration) – Diese Funktion ruft die Funktion nach einer Dauer von Millisekunden auf. Dies funktioniert für eine Ausführung. Sehen wir uns ein Beispiel an: Es wartet 2000 Millisekunden und führt dann die Rückruffunktion aus ist Die Funktion wird nach jeder Dauer von Millisekunden aufgerufen. Dies kann unbegrenzt oft durchgeführt werden. Sehen wir uns ein Beispiel an: Es löst alle 2000 ms einen Alarm aus

Verwenden Sie die Funktion „clearTimeout' in JavaScript, um den Timer „setTimeout' abzubrechen Verwenden Sie die Funktion „clearTimeout' in JavaScript, um den Timer „setTimeout' abzubrechen Nov 18, 2023 am 08:05 AM

Um die Funktion „clearTimeout“ in JavaScript zum Abbrechen des Timers „setTimeout“ zu verwenden, benötigen Sie bestimmte Codebeispiele. In JavaScript wird die Funktion „setTimeout“ verwendet, um einen bestimmten Code nach einer bestimmten Zeitverzögerung auszuführen. Die Funktion setInterval wird verwendet, um einen bestimmten Code innerhalb eines bestimmten Zeitintervalls wiederholt auszuführen. In einigen Fällen müssen wir jedoch möglicherweise den Timer abbrechen, bevor er ausgeführt wird. In diesem Fall können Sie c verwenden

See all articles