最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)

2023-07-17 01:55 作者:王老狗啊  | 我要投稿

同步&異步

1、同步任務(wù)

同步任務(wù)指的是,在主線程上排隊(duì)執(zhí)行的任務(wù),只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù)

2、異步任務(wù)

異步任務(wù)指的是,不進(jìn)入主線程、而進(jìn)入"任務(wù)隊(duì)列"(task queue)的任務(wù),只有等主線程任務(wù)執(zhí)行完畢,"任務(wù)隊(duì)列"開(kāi)始通知主線程,請(qǐng)求執(zhí)行任務(wù),該任務(wù)才會(huì)進(jìn)入主線程執(zhí)行。

3、js異步操作包括:

  1. 定時(shí)器
  2. 事件綁定
  3. 回調(diào)函數(shù)可以理解為異步(不是嚴(yán)謹(jǐn)?shù)漠惒讲僮鳎?/li>
  4. AJAX中一般我們都采取異步操作(也可以同步)
  5. new Promise中的resolve()

4、同步和異步運(yùn)行機(jī)制

  • 有同步任務(wù)都在主線程上執(zhí)行,形成一個(gè)執(zhí)行棧(execution context stack)。
  • 主線程之外,還存在一個(gè)"任務(wù)隊(duì)列"(task queue)。只要異步任務(wù)有了運(yùn)行結(jié)果,就在"任務(wù)隊(duì)列"之中放置一個(gè)事件。
  • 一旦"執(zhí)行棧"中的所有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會(huì)讀取"任務(wù)隊(duì)列",看看里面有哪些事件。那些對(duì)應(yīng)的異步任務(wù),于是結(jié)束等待狀態(tài),進(jìn)入執(zhí)行棧,開(kāi)始執(zhí)行。
  • 主線程不斷重復(fù)上面的第三步。只要主線程空了,就會(huì)去讀取"任務(wù)隊(duì)列",這就是JavaScript的運(yùn)行機(jī)制。這個(gè)過(guò)程會(huì)不斷重復(fù)。

事件循環(huán)

簡(jiǎn)單來(lái)說(shuō),JS 的事件循環(huán)(Event Loop)機(jī)制,決定了什么時(shí)候該執(zhí)行哪一行代碼。雖然 JS 是單線程的,但瀏覽器是多線程的,所以 JS 借助瀏覽器提供的能力,實(shí)現(xiàn)了 JS 的異步編程(比如 setTimeout 方法)。如果沒(méi)有 JS 事件循環(huán),則當(dāng)瀏覽器執(zhí)行一段耗時(shí)的 JS 同步代碼時(shí),就沒(méi)有辦法及時(shí)響應(yīng)用戶的其他操作,從而給用戶帶來(lái)不好的體驗(yàn)。

  • 事件循環(huán)負(fù)責(zé)收集事件(如mousemove、setTimeout等),并對(duì)事件觸發(fā)的回調(diào)任務(wù)進(jìn)行排隊(duì)以便在合適的時(shí)候執(zhí)行。先執(zhí)行宏任務(wù),然后是微任務(wù),然后在開(kāi)始下一次循環(huán)之前執(zhí)行一些必要的渲染,如此循環(huán)往復(fù)。

JS 的事件循環(huán)主要由這幾部分組成:調(diào)用棧、web API、微任務(wù)隊(duì)列、宏任務(wù)隊(duì)列調(diào)用棧

JS 調(diào)用棧(Call Stack)是一個(gè)用于記錄函數(shù)調(diào)用的數(shù)據(jù)結(jié)構(gòu),它遵循先進(jìn)后出的原則(LIFO)。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),它的執(zhí)行上下文(包括函數(shù)參數(shù)、局部變量等)被添加到調(diào)用棧的頂部。當(dāng)函數(shù)執(zhí)行完畢時(shí),它的執(zhí)行上下文被從調(diào)用棧中彈出,控制權(quán)回到調(diào)用該函數(shù)的上一個(gè)執(zhí)行上下文。

web API

JS 的 Web API 是瀏覽器提供的一組 API,用于與瀏覽器環(huán)境交互,包括 DOM、XMLHttpRequest、Fetch、setTimeout 等。這些 API 不是 JS 語(yǔ)言本身的一部分,而是瀏覽器提供的擴(kuò)展,通過(guò)這些 API 可以讓 JS 與瀏覽器環(huán)境進(jìn)行交互。

微任務(wù)宏任務(wù)

微任務(wù)隊(duì)列

微任務(wù)隊(duì)列用于存放微任務(wù),它遵循先進(jìn)先出的原則(FIFO)。當(dāng)一個(gè)微任務(wù)被調(diào)度時(shí),它被添加到微任務(wù)隊(duì)列的末端,排隊(duì)等待 JS 主線程的執(zhí)行。

宏任務(wù)隊(duì)列

宏任務(wù)隊(duì)列用于存放宏任務(wù),它遵循先進(jìn)先出的原則(FIFO)。當(dāng)一個(gè)宏任務(wù)被調(diào)度時(shí),它被添加到宏任務(wù)隊(duì)列的末端,排隊(duì)等待 JS 主線程的執(zhí)行。

千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
玉林市| 微山县| 越西县| 临湘市| 长武县| 茌平县| 河西区| 闽清县| 凌海市| 铅山县| 嘉定区| 嘉峪关市| 大兴区| 上饶市| 玉山县| 安图县| 璧山县| 滨海县| 民丰县| 临夏县| 西和县| 克拉玛依市| 霍山县| 浦江县| 汝阳县| 新巴尔虎左旗| 海盐县| 梧州市| 天等县| 利辛县| 错那县| 昂仁县| 鄂托克旗| 安西县| 涟水县| 维西| 乐安县| 芦山县| 襄城县| 灵川县| 逊克县|