検索
ホームページウェブフロントエンドjsチュートリアルJavaScript コールスタックと setTimeout の使用法_JavaScript スキルの詳細な分析

setTimeout は、次のような関数の実行を遅らせるために Javascript でよく使用されます。

コードをコピー コードは次のとおりです。 🎜>
setTimeout(function(){alert("Hello World");},1000);

実行後 1 秒遅れてアラート ウィンドウが表示されます。この文。次に、この段落をもう一度見てください。

コードをコピー コードは次のとおりです。
関数 a (){
setTimeout(function() {alert(1)}, 0);
alert(2)
}


支払いこのコードに注目してください。 setTimeout 遅延が 0 に設定されているため、遅延は 0 ミリ秒、つまり 1、2 ミリ秒間で実行されるように見えます。しかし、実際の実行結果は確かに 2,1 です。なぜ?これは、JavaScript 呼び出しスタックと setTimeout の関数から始まります。

まず、JavaScript はシングルスレッドです。つまり、同時に実行されるコードは 1 つだけであるため、各 JavaScript コード実行ブロックは他の非同期イベントの実行を「ブロック」します。次に、他のプログラミング言語と同様に、JavaScript の関数呼び出しもスタックを通じて実装されます。関数 a を実行するとき、最初に a がスタックにプッシュされます。 setTimeout がalert(1) に追加されていない場合は、次にalert(1)がスタックにプッシュされ、最後にalert(2)がスタックにプッシュされます。しかし、setTimeout をalert(1) に追加した後、alert(1) は新しいスタックに追加され、待機して「できるだけ早く」実行されます。これはできるだけ早く実行するという意味で、a のスタックが完了したらすぐに実行するため、実際の実行結果は最初にalert(2)、次にalert(1)になります。ここで、setTimeout は実際に現在の関数呼び出しスタックからalert(1) を削除します。次の例を見てください:




このような関数の目的は、次の文字をすべて削除することです。文字を入力するたびに現在の入力内容が表示されますが、実際の効果はアラートが表示されてボタンが押される前の内容です。ここでは、setTimeout(0) を使用してこれを実現できます。




このようにonkeydown イベントがトリガーされ、アラートが次の呼び出しスタックに入れられ、onkeydown イベントによってトリガーされたスタックが閉じられると実行が開始されます。もちろん、ブラウザにはニーズを満たす onkeyup イベントもあります。

このような setTimeout の使用法は、実際のプロジェクトでは依然として頻繁に発生します。たとえば、ブラウザは、DOM を変更する前に関数スタックが終了するまで賢明に待機します。この関数スタックでページの背景が最初に白から赤に設定され、その後白に戻された場合、ブラウザは DOM が変更されていないと判断します。変更され、これを無視するという 2 つの文があるため、setTimeout を通じて「白に戻す」関数を次のスタックに追加できます。これにより、背景色が変更されたことを確認できます (ただし、すぐには気付かない可能性があります)。

つまり、setTimeout は Javascript 関数呼び出しの柔軟性を高め、関数の実行シーケンスをスケジュールするのに非常に便利です。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
iOS 17:如何在待机模式下自定义小部件iOS 17:如何在待机模式下自定义小部件Sep 17, 2023 pm 01:57 PM

待机是iOS17中一种新的可自定义锁屏模式,可在iPhone充电并侧卧时激活。可以将其视为iPhone的一种智能显示屏,例如,当您的设备在厨房,书桌或床头柜上充电时,可以快速访问可以远处查看的不同可浏览信息屏幕。自定义备用构件待机由三个屏幕组成,可以通过在iPhone显示屏上水平滑动来访问。第一个屏幕是交互式小部件所在的位置,而向左滑动会显示第二个和第三个屏幕,分别显示照片图库中的照片和大时钟显示。小部件屏幕由两个并排显示的交互式小部件堆栈组成,您可以独立地上下滑动。这些堆栈就像主屏幕小部件堆栈

如何在iPhone上自定义和编辑待机模式:iOS 17的新功能如何在iPhone上自定义和编辑待机模式:iOS 17的新功能Sep 21, 2023 pm 04:01 PM

待机是iOS17更新中的一项新功能,它提供了一种新的增强方式,可以在手机快速闲置时访问信息。通过StandBy,您可以方便地查看时间、查看即将发生的事件、浏览日历、获取您所在位置的天气更新等等。激活后,iPhone在充电时设置为横向时会直观地进入待机模式。此功能非常适合床头柜等无线充电点,或者在日常任务中离开iPhone充电时。它允许您轻扫待机中显示的各种小部件,以访问来自各种应用程序的不同信息集。但是,您可能希望根据您的偏好和您经常需要的信息修改这些小部件,甚至删除一些小部件。因此,让我们深入

settimeout和setinterval有什么区别settimeout和setinterval有什么区别Aug 15, 2023 pm 02:06 PM

settimeout和setInterval的区别:1、触发时间,settimeout是一次性的,它在设定延迟时间之后执行一次函数,而setinterval是重复性的,它会以设定的时间间隔重复执行函数;2、执行次数,settimeout只执行一次,而setinterval会一直重复执行,直到被取消。

如何解决Java堆栈溢出异常如何解决Java堆栈溢出异常Nov 13, 2023 am 09:35 AM

解决Java堆栈溢出异常的方法有:1、修改代码逻辑,避免无限递归和循环依赖;2、增加Java虚拟机堆栈大小;3、使用尾递归优化;4、使用迭代替代递归;5、使用多线程。Java堆栈溢出异常通常是由于递归调用太深或者循环依赖导致的,当一个函数递归调用自身,并且没有在某一点终止递归,就会导致堆栈溢出。这是因为每次函数调用都会在堆栈中添加一个新的堆栈帧,如果调用太多次,堆栈就会溢出。

堆和栈的区别是什么堆和栈的区别是什么Aug 10, 2023 am 10:12 AM

堆和栈的区别是:1、栈是一种线性数据结构,而堆则是一种树状的数据结构;2、栈的内存分配方式是自动的,而堆的内存分配与释放需要手动管理;3、栈的内存分配速度相对较快,而堆的内存分配速度较慢;4、栈的大小是固定的,而堆的大小可以根据需要进行动态调整;5、栈适用于管理局部变量、函数调用和递归等,而堆适用于需要长时间存储的数据、动态数据结构和大型数据等。

深入探讨Golang中堆栈的差异深入探讨Golang中堆栈的差异Mar 13, 2024 pm 05:15 PM

Golang是一门广受欢迎的编程语言,其在并发编程方面拥有独特的设计理念。在Golang中,堆栈(heap和stack)的管理是一项非常重要的任务,对于理解Golang程序的运行机制至关重要。本文将深入探讨Golang中堆栈的差异,并通过具体的代码示例来展示它们之间的区别和联系。在计算机科学中,堆栈是两种常见的内存分配方式,它们在内存管理和数据存储上有着不同

Java使用StackTraceElement类追踪方法调用堆栈Java使用StackTraceElement类追踪方法调用堆栈Jul 25, 2023 pm 03:21 PM

Java使用StackTraceElement类追踪方法调用堆栈引言:在软件开发中,调试是一个非常重要的过程,它可以帮助我们定位问题并找出错误的根源。而在调试过程中,了解方法调用的堆栈情况可以帮助我们更快地找出问题所在。Java中,我们可以通过使用StackTraceElement类来追踪方法调用堆栈。一、StackTraceElement类介绍:Stack

PHP SPL 数据结构:一个让你的代码焕然一新的工具包PHP SPL 数据结构:一个让你的代码焕然一新的工具包Feb 19, 2024 pm 12:09 PM

PHPSPL数据结构:概述phpSPL数据结构是PHP标准库(SPL)中的一个组件,它提供了一组通用数据结构,包括堆栈、队列、数组和哈希表。这些数据结构经过优化,可高效处理各种数据类型,并提供了一致的接口,简化了应用程序开发。主要数据结构堆栈堆栈是一种遵循后进先出(LIFO)原则的有序集合。在堆栈中,最后一个添加的元素将是第一个被删除的元素。SPL提供了一个SplStack类来表示堆栈。以下示例展示了如何使用SplStack:$stack=newSplStack();$stack->push(1

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)