JS 非同步與單執行緒)

2022-07-08 20:18:19 字數 2229 閱讀 9190

js(非同步與單執行緒)

題目1.同步和非同步的區別是什麼,試舉例(例子見知識點)

區別:1.同步會阻塞**執行,而非同步不會

2.alert 是同步,settimeout 是非同步

題目2.關於 settimeout

結果:1 3 5 2 4

題目3.前端使用非同步的場景有哪些

1.定時任務:settimeout,setinverval

2.網路請求:ajax 請求,動態

載入3.事件繫結

知識點一、什麼是非同步

結果:100 300 200

非同步結果:100 300(不做等待) 200

同步結果:100 200(等待) 300   (會阻塞後面**的執行)

對比同步

結果(同步):100 200(點選確認) 300  

何時需要非同步

1.在可能發生等待的情況

2.等待過程中不能像 alert 一樣阻塞程式執行

總之,所有的「等待的情況」都需要非同步

二、前端使用非同步的場景

1.定時任務:settimeout,setinverval

2.網路請求:ajax 請求,動態

載入ajax 請求示例

結果:

ajax 請求需要等待

過程:1.執行第一行,列印  start

2.執行 $.get 後,函式 data1 會被暫存起來,不會立即執行(單執行緒的特點,不能同時幹兩件事)

3.執行最後一行,列印300

4.待所有程式執行完,處於空閒狀態時,會立馬看有沒有暫存起來的要執行

5.發現暫存起來的 $.get 中的 data1 未執行,待請求 data1.json返回 後,立即執行 data1

動態載入示例

結果:

不知道何時完成載入,需要等待

3.事件繫結

事件繫結示例

結果:(點選之後才出現 clicked)

不知道使用者何時點選,需要等待

三、非同步和單執行緒

js 是單執行緒的語言,所謂「單執行緒」就是一根筋,對於拿到的程式,一行一行的執行,直到上面的執行為完成,只能做這一件事

輸出:100 300 200

這個任務是序列的,不能發生阻塞,使用非同步解決這種問題

過程:1.執行第一行,列印100

2.執行settimeout 後,傳入settimeout 的函式會被暫存起來,不會立即執行(單執行緒的特點,不能同時幹兩件事)

3.執行最後一行,列印300

4.待所有程式執行完,處於空閒狀態時,會立馬看有沒有暫存起來的要執行

5.發現暫存起來的 settimeout 中的函式無需等待時間,立即起來執行

執行程式這樣沒有問題,但是對於 js 最初使用的環境 ———— 瀏覽器客戶端 ———— 就不一樣了。因此在瀏覽器端執行的 js ,可能會有大量的網路請求,而乙個網路資源啥時候返回,這個時間是不可預估的。這種情況也要傻傻的等著、卡頓著、啥都不做嗎?———— 那肯定不行。

因此,js 對於這種場景就設計了非同步 ———— 即,發起乙個網路請求,就先不管這邊了,先乾其他事兒,網路請求啥時候返回結果,到時候再說。這樣就能保證乙個網頁的流程執行。

js 單執行緒 非同步

執行緒與程序 程序是系統資源分配和排程的單元。乙個執行著的程式就對應乙個程序。在windows中,每乙個開啟的執行的應用程式或後台程式,比如執行中的qq,谷歌瀏覽器,網易雲 資源管理器等都是乙個程序。乙個程序包括了執行中的程式和程式所使用到的記憶體和系統資源。比如,邊聽 邊在寫部落格,這 就是開了兩...

JS非同步和單執行緒舉例

js 需要非同步的根本原因是 js 是單執行緒運 的,即在同 時間只能做 件事,不能 個 ajax 請求由於 絡 較慢,請求需要 5 秒鐘。如果是同步,這 5 秒鐘 就卡死在這 啥也做不了了。非同步的話,就好很多了,5 秒等待就等待了,其他事情不耽誤做,於那 5 秒鐘等待是 速太慢,不是因為 js ...

JS 演變 單執行緒 非同步任務

js是一門指令碼語言 解析型語言 弱型別語言 動態型別語言。歷史演變 js 作為一門指令碼語言,其執行環境 web瀏覽器 node adobe flash dom詳解 1.js 執行在瀏覽器中,是單執行緒的 2.瀏覽器是多執行緒的 3.瀏覽器中的 js 任務1.js主線程 由js引擎提供 2.js同...