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同...