JS中的非同步

2022-07-15 18:33:16 字數 2031 閱讀 9612

hello,日常更新的我「浪」回來了!!!

js中有三座高山:非同步和單執行緒、作用域和閉包、原型原型鏈

今天「浪」的主題是js中的非同步和單執行緒的問題。

主要從這三個方面入手

一、什麼是非同步(與同步作比較)

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

三、非同步和單執行緒

一:什麼是非同步 

說非同步之前我們先了解一下同步:同步可以簡單的來說就是順序執行

console.log(100);

alert(200) //

點選確定往下執行,如果不點選確定,就會阻塞不往下執行

console.log(300)

//列印100,彈出200(點選確定往下執行),列印300

接下來我們來說非同步(當執行非同步**時,不會影響另一些**執行)

console.log(100);

settimeout(

function() , 1000);

console.log(200)

這段**的執行結果為:

非同步和同步的區別就在於:

同步:會阻塞後續**的執行

非同步:不會阻塞**執行

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

1、定時任務:settimeout  、 setinterval(**同上)

2、網路請求 :ajax請求、動態的建立

載入、

console.log("start")

$.get("./data.json",(data)=>)

console.log("end")

//列印start,列印end 等待獲取**函式傳來的data資料渲染頁面

//為啥ajax要用非同步呢?因為向伺服器請求資料,誰也不知道多長時間能返回資料(有可能幾秒,有可能拿不到資料)

如果資料拿不到,頁面肯定還是要正常顯示的,所以必須是非同步

console.log("start")

var img = document.createelement("img");

img.onload =function

() img.src='/aa.png'console.log("end")

//列印start,列印end,載入

3、事件繫結

console.log("start")

document.getelementbyid("btn").addeventlistener("click",()=>)

console.log("end")

//列印start,列印end,載入

三 、非同步和單執行緒

下面**和介紹非同步的**區別是延時器沒有設定時間

console.log(100);

settimeout(

function

() );

console.log(200)

執行順序:

先列印100,

執行settimeout,這個函式會被暫存起來,不會立即執行(因為單執行緒只能乙個乙個執行)

列印300,

等待所有的程式執行完後,瀏覽器會看有沒有暫存的,

暫存裡面有settimeout,settimeout沒有設定時間,不用等待然後立刻執行

那什麼叫單執行緒呢??

簡單來說就是一次只能幹一件事,乙個乙個排隊,不能多個一起執行(因為不是多執行緒)

標準定義:瀏覽器只分配給js乙個主線程,用來執行任務(函式),但一次只能執行乙個任務,這些任務形成乙個任務佇列排隊等候執行,

但前端的某些任務是非常耗時的,比如網路請求,定時器和事件監聽,如果讓他們和別的任務一樣,都老老實實的排隊等待執行的話,

執行效率會非常的低,甚至導致頁面的假死。所以,瀏覽器為這些耗時任務開闢了另外的執行緒,主要包括http請求執行緒,瀏覽器定時觸發器,

瀏覽器事件觸發執行緒,這些任務是非同步的。

JS中的同步與非同步

一 js中同步非同步程式設計 瀏覽器是多執行緒,js是單執行緒的 瀏覽器只分配乙個執行緒來執行js 程序大執行緒小 乙個程序中包含多個執行緒,例如在瀏覽器中開啟乙個html頁面就占用了乙個程序,載入頁面的時候,瀏覽器分配乙個執行緒去計算dom樹,分配其他的執行緒去載入 對應的資源檔案。在分配乙個執行...

JS中的非同步程式設計方法

js語言的執行環境是 單執行緒 所謂單執行緒,就是乙個時間只能完成乙個任務,如果有多個任務,就必須排隊。單執行緒 的壞處是 只要有乙個任務耗時很長,後面的任務就必須排隊等待,會拖延整個程式的執行。為了解決這個問題,js的任務執行模式分為兩種 同步 synchronous 和非同步 asynchron...

js中的同步和非同步

一 單執行緒 j ascript 語言的一大特點就是單執行緒,也就是說,同乙個時間只能做一件事,需要排隊執行。如果前面的a任務會花費大量的時間,就會導致後面的b任務停止執行,知道a執行完才會執行b。如果排隊是因為計算量大,cpu忙不過來,倒也算了,但是很多時候cpu是閒著的,因為io裝置 輸入輸出裝...