日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript相关面试题:setTimeout的运行机制

發布時間:2024/1/18 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript相关面试题:setTimeout的运行机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • setTimeout簡介
  • JavaScript 單線程
  • setTimeout運行機制


setTimeout簡介

setTimeout()函數:用來指定某個函數或某段代碼在多少毫秒之后執行。它返回一個整數,表示定時器timer的編號,可以用來取消該定時器。

console.log(1); setTimeout(function () {console.log(2); }, 0); console.log(3)//1 3 2

無論setTimeout的執行時間是0還是1000,結果都是先輸出3后輸出2,這就是面試官常常考查的js運行機制的問題

JavaScript 單線程

JavasScript引擎是基于事件驅動和單線程執行的,JS引擎一直等待著任務隊列中任務的到來,然后加以處理,瀏覽器無論什么時候都只有一個JS線程在運行程序,即主線程。那么單線程的JavasScript是怎么實現“非阻塞執行”呢?是通過任務隊列。

所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。

單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著。但是如果有些任務很慢時(比如Ajax操作從網絡讀取數據),我還是要等結果在執行后一個任務嗎?于是,有了一種異步任務。

同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;而異步任務指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有主線程執行完畢,主線程去通知"任務隊列",某個異步任務可以執行了,該任務才會進入主線程執行。

★所有同步任務都在主線程上執行,形成一個執行棧(Call Stack)
★主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件
★一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,于是結束等待狀態,進入執行棧,開始執行。
★主線程不斷重復上面的第三步

setTimeout運行機制

setTimeout 和 setInterval的運行機制,其實就是將指定的代碼移出本次執行,等到下一輪 Event Loop 時,再檢查是否到了指定時間。如果到了,就執行對應的代碼;如果不到,就等到再下一輪 Event Loop 時重新判斷。
這意味著,setTimeout指定的代碼,必須等到本次執行的所有同步代碼都執行完,才會執行。

總結

以上是生活随笔為你收集整理的JavaScript相关面试题:setTimeout的运行机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。