Heim Web-Frontend js-Tutorial Die setTimeout-Zeit wird für die detaillierte Analyse auf 0 gesetzt

Die setTimeout-Zeit wird für die detaillierte Analyse auf 0 gesetzt

May 30, 2018 pm 03:56 PM
settimeout 解析 详细

setTimeout() ist eine Methode, die zu window gehört, aber wir alle lassen den Containernamen der obersten Ebene weg. Dies wird zum Festlegen einer Zeit verwendet. Wenn die Zeit abgelaufen ist, wird der folgende Artikel ausgeführt hauptsächlich erklärt Wir haben relevante Informationen zum Setzen der setTimeout-Zeit auf 0 eingeführt. Freunde in Not können sich darauf beziehen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich den relevanten Inhalt zum Festlegen der setTimeout-Zeit auf 0 vor und stellt ihn für Ihre Referenz und Ihr Studium zur Verfügung . Zu den folgenden Worten gibt es nicht viel mehr zu sagen, werfen wir einen Blick auf die ausführliche Einleitung.

1. Vorspeise, was ist setTimeout

Werfen wir zunächst einen Blick auf die Erklärung von setTimeout auf w3school

Die Methode setTimeout(fn,millisec) wird verwendet, um eine Funktion oder einen berechneten Ausdruck nach einer angegebenen Anzahl von Millisekunden aufzurufen.

Es ist ganz einfach setTimeout() Führen Sie fn nur einmal aus. Wann es ausgeführt wird, hängt von der Anzahl der Millisekunden ab, die durch den zweiten Parameter Millisekunden festgelegt werden, daher sind viele Leute daran gewöhnt, es Verzögerung zu nennen, was nichts anderes ist als eine Verzögerung von einem bestimmten Zeitraum. Führen Sie dann den darin enthaltenen Code aus.

setTimeout(function(){
 console.log('我是setTimeout');
}, 1000);
Nach dem Login kopieren

Unter normalen Umständen wird dieser Satz nicht sofort, sondern nach 1000 Millisekunden in der Browserkonsole ausgegeben.

2. Hauptgericht, js ist Single-Threaded

OK, schauen wir uns ein Beispiel an dieses Beispiel?

setTimeout(function(){
 console.log(1);
}, 0);
console.log(2);
console.log(3);
Nach dem Login kopieren

Zur Überraschung einiger Leute waren die Ergebnisse 2, 3, 1. Dies scheint der Routine nicht zu folgen. Es wartet offensichtlich 0 Millisekunden, das heißt, es wird direkt ausgegeben, ohne zu warten. Warum wird am Ende 1 ausgegeben?

Dies erfordert die Klärung eines sehr wichtigen Konzepts: js ist Single-Threading. Single-Threading bedeutet, dass alle Aufgaben in die Warteschlange gestellt werden müssen und die nächste Aufgabe erst ausgeführt wird, wenn die vorherige Aufgabe abgeschlossen ist. Wenn die vorherige Aufgabe lange dauert, muss die nächste Aufgabe warten.

Tatsächlich ist es leicht zu verstehen. So wie jeder zum Einkaufen in den Supermarkt geht, muss sich jeder, der etwas kauft, an der Kasse anstellen Bedienen Sie jeweils nur eine Person. Erst nachdem dieser Kunde ausgecheckt hat, kann der nächste Kunde bedient werden.

Der Kernel des Browsers arbeitet unter der Kontrolle des Kernels zusammen, um die Synchronisierung aufrechtzuerhalten. Ein Browser implementiert mindestens drei residente Threads: Javascript-Engine-Thread, GUI-Rendering-Thread und Browser-Ereignisse Trigger-Thread.

  • Die JavaScript-Engine basiert auf der ereignisgesteuerten Single-Thread-Ausführung. Die JS-Engine hat auf das Eintreffen von Aufgaben in der Aufgabenwarteschlange gewartet und diese dann nur vom Browser verarbeitet Es kann jederzeit ein JS-Thread ausgeführt werden.

  • Der GUI-Rendering-Thread ist für das Rendern der Browseroberfläche verantwortlich. Wenn die Schnittstelle neu gezeichnet werden muss (Repaint) oder ein Reflow durch einen Vorgang verursacht wird, wird dies der Fall sein hingerichtet. Es ist jedoch zu beachten, dass sich der GUI-Rendering-Thread und die JS-Engine gegenseitig ausschließen. Wenn die JS-Engine ausgeführt wird, wird der GUI-Thread angehalten und GUI-Updates werden in einer Warteschlange gespeichert und sofort ausgeführt, wenn die JS-Engine ausgeführt wird Leerlauf.

  • Ereignisauslöser-Thread Wenn ein Ereignis ausgelöst wird, fügt der Thread das Ereignis am Ende der ausstehenden Warteschlange hinzu und wartet auf die Verarbeitung durch die JS-Engine. Diese Ereignisse können aus dem Codeblock stammen, der derzeit von der JavaScript-Engine ausgeführt wird, z. B. setTimeOut, oder aus anderen Threads im Browserkernel, z. B. Mausklicks, asynchronen AJAX-Anforderungen usw. Aufgrund der Single-Thread-Beziehung von JS jedoch alle Diese Ereignisse müssen zur Verarbeitung durch die JS-Engine in die Warteschlange gestellt werden. (Asynchroner Code wird ausgeführt, wenn im Thread kein synchroner Code ausgeführt wird.)

Wenn die Ausführung des js-Codes tatsächlich auf setTimeout(fn,millisec) trifft, ist die Funktion fn wird in die Aufgabenwarteschlange gestellt. Wenn der JS-Engine-Thread inaktiv ist und die durch Millisekunden angegebene Zeit erreicht, wird fn zur Ausführung in den JS-Engine-Thread gestellt.

setTimeout(fn,0) bedeutet, eine Aufgabe anzugeben, die in der frühesten verfügbaren Leerlaufzeit des Hauptthreads ausgeführt werden soll, dh so früh wie möglich ausgeführt werden soll. Es fügt am Ende der „Aufgabenwarteschlange“ ein Ereignis hinzu, sodass es erst ausgeführt wird, wenn die Synchronisierungsaufgabe und die vorhandenen Ereignisse in der „Aufgabenwarteschlange“ verarbeitet wurden.

Der HTML5-Standard schreibt vor, dass der Mindestwert (kürzestes Intervall) des zweiten Parameters von setTimeout() nicht weniger als 4 Millisekunden betragen darf. Wenn er niedriger als dieser Wert ist, wird er automatisch erhöht. Zuvor haben ältere Browser das Mindestintervall auf 10 Millisekunden festgelegt. Darüber hinaus werden diese DOM-Änderungen (insbesondere solche, die das erneute Rendern von Seiten beinhalten) normalerweise nicht sofort, sondern alle 16 Millisekunden ausgeführt. Zu diesem Zeitpunkt ist die Wirkung von requestAnimationFrame() besser als setTimeout() .

Es ist zu beachten, dass setTimeout() das Ereignis nur in die „Aufgabenwarteschlange“ einfügt und der Hauptthread die von ihm angegebene Rückruffunktion erst dann ausführt, wenn der aktuelle Code (Ausführungsstapel) abgeschlossen ist. Wenn der aktuelle Code lange dauert, kann es lange dauern, sodass nicht garantiert werden kann, dass die Rückruffunktion zu dem durch setTimeout() angegebenen Zeitpunkt ausgeführt wird.

3. Dessert, die wunderbare Verwendung von setTimeout

其实setTimeout是有一些妙用的,这里简单列举几个。

函数去抖

让一个函数在一定间隔内没有被调用时,才开始执行被调用方法。比如当你在使用 google 搜索内容的时候,有些关键词输入到一半,谷歌会展示一个可选列表,根据你当前输入的内容作出的一个猜测联想。需要监听文字改变,每一次改变都会调用一次回调函数,现在需要的一种实现是在用户停止键盘事件一段时间后,去发送一个请求。

var debounce = function(method, context) {
 clearTimeout(method.tId);
 method.tId = setTimeout(function(){
  method.call(context);
 },100);
}
Nach dem Login kopieren

轮训任务

js中可以使用setInterval开启轮询,但是这种存在一个问题就是执行间隔往往就不是你希望的间隔时间。

比如有个轮询任务间隔是100ms,但是执行方法的时间需要450ms,那么在200ms、300ms、400ms本来是计划中执行任务的时间,浏览器发现第一个还未执行完,那么就会放弃2、3、4次的任务执行,并且在500ms之后再次执行任务,这样的话,其实再次执行的间隔就只有50ms。使用setTimeout构造轮询能保证每次轮询的间隔。

setTimeout(function () {
 console.log('我被调用了');
 setTimeout(arguments.callee, 100);
}, 100);
Nach dem Login kopieren

延迟js引擎的调用

var p = document.createElement('p');
p.innerHTML = '我是一个p';
p.setAttribute('style', 'width:200px; height:200px;background-color:#f00; ');
document.body.appendChild(p);
setTimeout(function() {
 console.log('我被调用了');
}, 1000);
Nach dem Login kopieren

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

jQuery替换节点元素的操作方法

Vue中computed与methods的区别详解

javaScript实现鼠标在文字上悬浮时弹出悬浮层效果

Das obige ist der detaillierte Inhalt vonDie setTimeout-Zeit wird für die detaillierte Analyse auf 0 gesetzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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)

Ein tiefer Einblick in die Bedeutung und Verwendung des HTTP-Statuscodes 460 Ein tiefer Einblick in die Bedeutung und Verwendung des HTTP-Statuscodes 460 Feb 18, 2024 pm 08:29 PM

Eingehende Analyse der Rolle und Anwendungsszenarien des HTTP-Statuscodes 460. Der HTTP-Statuscode ist ein sehr wichtiger Teil der Webentwicklung und wird verwendet, um den Kommunikationsstatus zwischen Client und Server anzuzeigen. Unter diesen ist der HTTP-Statuscode 460 ein relativ spezieller Statuscode. In diesem Artikel werden seine Rolle und Anwendungsszenarien eingehend analysiert. Definition des HTTP-Statuscodes 460 Die spezifische Definition des HTTP-Statuscodes 460 lautet „ClientClosedRequest“, was bedeutet, dass der Client die Anfrage schließt. Dieser Statuscode wird hauptsächlich zur Anzeige verwendet

iBatis und MyBatis: Vergleich und Vorteilsanalyse iBatis und MyBatis: Vergleich und Vorteilsanalyse Feb 18, 2024 pm 01:53 PM

iBatis und MyBatis: Analyse der Unterschiede und Vorteile Einführung: In der Java-Entwicklung ist Persistenz eine häufige Anforderung, und iBatis und MyBatis sind zwei weit verbreitete Persistenz-Frameworks. Obwohl sie viele Gemeinsamkeiten aufweisen, gibt es auch einige wesentliche Unterschiede und Vorteile. Dieser Artikel vermittelt den Lesern ein umfassenderes Verständnis durch eine detaillierte Analyse der Funktionen, der Verwendung und des Beispielcodes dieser beiden Frameworks. 1. iBatis-Funktionen: iBatis ist ein älteres Persistenz-Framework, das SQL-Zuordnungsdateien verwendet.

Ausführliche Erklärung des Oracle-Fehlers 3114: So beheben Sie ihn schnell Ausführliche Erklärung des Oracle-Fehlers 3114: So beheben Sie ihn schnell Mar 08, 2024 pm 02:42 PM

Ausführliche Erklärung des Oracle-Fehlers 3114: Um ihn schnell zu beheben, sind spezifische Codebeispiele erforderlich. Bei der Entwicklung und Verwaltung von Oracle-Datenbanken stoßen wir häufig auf verschiedene Fehler, unter denen Fehler 3114 ein relativ häufiges Problem ist. Fehler 3114 weist normalerweise auf ein Problem mit der Datenbankverbindung hin, das durch einen Netzwerkfehler, einen Stopp des Datenbankdienstes oder falsche Einstellungen der Verbindungszeichenfolge verursacht werden kann. In diesem Artikel wird die Ursache des Fehlers 3114 ausführlich erläutert und wie dieses Problem schnell gelöst werden kann. Außerdem wird der spezifische Code angehängt

Analyse der Bedeutung und Verwendung von Midpoint in PHP Analyse der Bedeutung und Verwendung von Midpoint in PHP Mar 27, 2024 pm 08:57 PM

[Analyse der Bedeutung und Verwendung von Mittelpunkt in PHP] In PHP ist Mittelpunkt (.) ein häufig verwendeter Operator, der zum Verbinden zweier Zeichenfolgen oder Eigenschaften oder Methoden von Objekten verwendet wird. In diesem Artikel befassen wir uns eingehend mit der Bedeutung und Verwendung von Mittelpunkten in PHP und veranschaulichen sie anhand konkreter Codebeispiele. 1. String-Mittelpunkt-Operator verbinden Die häufigste Verwendung in PHP ist das Verbinden zweier Strings. Indem Sie . zwischen zwei Saiten platzieren, können Sie diese zu einer neuen Saite zusammenfügen. $string1=&qu

Analyse der neuen Funktionen von Win11: So überspringen Sie die Anmeldung bei einem Microsoft-Konto Analyse der neuen Funktionen von Win11: So überspringen Sie die Anmeldung bei einem Microsoft-Konto Mar 27, 2024 pm 05:24 PM

Analyse der neuen Funktionen von Win11: So überspringen Sie die Anmeldung bei einem Microsoft-Konto. Mit der Veröffentlichung von Windows 11 haben viele Benutzer festgestellt, dass es mehr Komfort und neue Funktionen bietet. Einige Benutzer möchten jedoch möglicherweise nicht, dass ihr System an ein Microsoft-Konto gebunden ist, und möchten diesen Schritt überspringen. In diesem Artikel werden einige Methoden vorgestellt, mit denen Benutzer die Anmeldung bei einem Microsoft-Konto in Windows 11 überspringen können, um ein privateres und autonomeres Erlebnis zu erreichen. Lassen Sie uns zunächst verstehen, warum einige Benutzer zögern, sich bei ihrem Microsoft-Konto anzumelden. Einerseits befürchten einige Benutzer, dass sie

Parsing Wormhole NTT: ein offenes Framework für jedes Token Parsing Wormhole NTT: ein offenes Framework für jedes Token Mar 05, 2024 pm 12:46 PM

Wormhole ist führend in der Blockchain-Interoperabilität und konzentriert sich auf die Schaffung robuster, zukunftssicherer dezentraler Systeme, bei denen Eigentum, Kontrolle und erlaubnislose Innovation im Vordergrund stehen. Die Grundlage dieser Vision ist das Bekenntnis zu technischem Fachwissen, ethischen Grundsätzen und Community-Ausrichtung, um die Interoperabilitätslandschaft mit Einfachheit, Klarheit und einer breiten Palette von Multi-Chain-Lösungen neu zu definieren. Mit dem Aufkommen wissensfreier Nachweise, Skalierungslösungen und funktionsreicher Token-Standards werden Blockchains immer leistungsfähiger und Interoperabilität wird immer wichtiger. In dieser innovativen Anwendungsumgebung eröffnen neuartige Governance-Systeme und praktische Funktionen beispiellose Möglichkeiten für Assets im gesamten Netzwerk. Protokollentwickler setzen sich nun mit der Frage auseinander, wie sie in dieser aufstrebenden Multi-Chain agieren sollen

Analyse von Exponentialfunktionen in C-Sprache und Beispiele Analyse von Exponentialfunktionen in C-Sprache und Beispiele Feb 18, 2024 pm 03:51 PM

Detaillierte Analyse und Beispiele von Exponentialfunktionen in der C-Sprache Einführung: Die Exponentialfunktion ist eine gängige mathematische Funktion, und es gibt entsprechende Bibliotheksfunktionen für Exponentialfunktionen, die in der C-Sprache verwendet werden können. In diesem Artikel wird die Verwendung von Exponentialfunktionen in der C-Sprache, einschließlich Funktionsprototypen, Parametern, Rückgabewerten usw., detailliert analysiert und spezifische Codebeispiele gegeben, damit die Leser Exponentialfunktionen besser verstehen und verwenden können. Text: Die Exponentialfunktionsbibliothek function math.h in der C-Sprache enthält viele Funktionen im Zusammenhang mit Exponentialfunktionen, von denen die exp-Funktion am häufigsten verwendet wird. Der Prototyp der exp-Funktion ist wie folgt

Apache2 kann PHP-Dateien nicht korrekt analysieren Apache2 kann PHP-Dateien nicht korrekt analysieren Mar 08, 2024 am 11:09 AM

Aus Platzgründen folgt hier ein kurzer Artikel: Apache2 ist eine häufig verwendete Webserver-Software und PHP ist eine weit verbreitete serverseitige Skriptsprache. Beim Erstellen einer Website stößt man manchmal auf das Problem, dass Apache2 die PHP-Datei nicht korrekt analysieren kann, was dazu führt, dass der PHP-Code nicht ausgeführt werden kann. Dieses Problem wird normalerweise dadurch verursacht, dass Apache2 das PHP-Modul nicht richtig konfiguriert oder das PHP-Modul nicht mit der Version von Apache2 kompatibel ist. Im Allgemeinen gibt es zwei Möglichkeiten, dieses Problem zu lösen: Die eine ist

See all articles