4.異步和單線程

js的三座大山

1.原型和原型鏈
2.作用域和閉包
3.異步和單線程
+變量的類型和計算+后邊的知識

//-------------題目---------------
1.同步和異步的區(qū)別是什么金顿?分別舉一個同步和異步的例子
    *同步會阻塞代碼執(zhí)行臊泌,異步不會;
    *alert是同步揍拆,setTimeout是異步渠概;
2.一個關于setTimeout的筆試題
//打印順序:1--3--5--2--1秒之后4
console.log(1);
setTimeout(function(){
    console.log(2);
},0);
console.log(3);
setTimeout(function(){
    console.log(4);
},1000);
console.log(5);
3.前端使用異步的場景有哪些

3個場景的特點是都需要等待,為什么等待需要異步呢,因為等待的過程中不 能有卡頓播揪,不能阻塞贮喧;這一切的方法和設計都是因為js單線程語言決定的,單線程就只允許同時做一件事猪狈,如果想同時做多個箱沦,那其他的都必須去一邊排隊去,先做好一件事把剩余的做完了在做其他的雇庙,這是一個串行的過程

1.定時任務:setTimeout,setInterval
2.網絡請求:ajax請求谓形,動態(tài)<img>加載
3.事件綁定

//---------------知識點-----------------

1.什么是異步(對比同步)
  //最大的區(qū)別:有沒有阻塞后面程序的進行
  //同步:會阻塞代碼的執(zhí)行
  //異步:(我走我的,我走完之后疆前,回來再說)

 /*****何時需要異步(什么情況下需要等待寒跳,什么情況需要異步)*******
  *在可能發(fā)生等待的情況
 (如果需要等待,不能卡在這竹椒,需要等待過程中繼續(xù)去做該做的事情)
  *等待過程中不能像alert一樣阻塞程序進行
  *因此童太,所有的“等待的情況”都需要異步
2.前端使用異步的場景有哪些
   1.定時任務:setTimeout,setInterval  
   2.網絡請求:ajax請求,動態(tài)<img>加載

*1碾牌、請求一個線上數據需要等待康愤,如果網絡情況好的話儡循,幾十毫秒舶吗、100毫秒就把這個數據拿到了,在計算機中這個一個非常長的時間择膝,這個時間不能卡著誓琼,而且你一個頁面肯定有很多請求,一請求就卡著肴捉,網頁就沒法看了
*2腹侣、如果網絡請求不好的話,一個接口的請求可能有幾秒鐘的時間齿穗,幾秒鐘不能卡著)
*3傲隶、如果網頁中使用了一google的cdn,結果近幾年google在國內不能用了窃页,請求不到我們的頁面不能白著跺株,請求這個事情我們最后不做了,后邊的該怎么做怎么做脖卖,不能因為請求不到就卡著

3.事件綁定

1個點擊事件綁上之后乒省,它什么時候點不知道,但是在它點之前下面該干什么干什么畦木,不能因為用戶不點這個按鈕了袖扛,下面的事情就不做了;綁上之后愛點不點十籍,點了之后是點了之后的事情蛆封,不點還得往下走唇礁。

 eg:1.
  //先打印100--300,一秒之后打印200
  console.log(100);
  //等待一秒之后打印出來200
  setTimeout(function(){
    console.log(200);
  },1000);
  console.log(300);

 eg:2.對比同步
  //打印100之后惨篱,彈出框彈出200等待確認垒迂,確認之后再打印300
  console.log(100);
  alert(200); //在沒有點擊確認之前,300不會被打印出來
  console.log(300);

 eg:3.ajax請求代碼示例
  //打印順序start--end--等著這個請求返回之后在執(zhí)行回調函數打出data1
  console.log('start');
   $.get('./data1.json',function(data1){
        console.log(data1);
   });
  console.log('end');
  
eg:4.<img>加載示例
    //先打印start--end--先定義一個img妒蛇,img加載完之后打印loaded
    console.log('start');
    var img = document.createElement('img');
    img.onload = function(){
        //這個不會執(zhí)行机断,因為它還沒回來,只有等到img加載完之后打印
        console.log('loaded');
    };
    img.src = '/xxx.png';
    console.log('end');
    
  eg:5.事件綁定示例
//打印順序:start--end--用戶什么時候觸發(fā)這個事件什么時候打clicked
    console.log('start');
    document.getElementById('btn1').addEventListener('click',function(){
        console.log('clicked');
    });
    console.log('end');
3.異步和單線程

異步和單線程的關系:
js是個單線程的語言绣夺,單線程一次只能干一件事吏奸,不能讓我干兩件,如果想讓干多件(同時去干兩件事)陶耍,那就必須有一個到一邊排隊去奋蔚,我先干完這個在說,如果沒有異步的話烈钞,就會出現卡頓的情況泊碑;(如果沒有異步干完第一件事,在干第二件事毯欣,第三件事的時候有可能會出現等待的現象馒过,單線程肯定得等著,等著之后就會出現卡頓酗钞,只有異步才能搞定這個問題腹忽,想等著就去后邊等著,先把接下來的事情搞定之后在去處理等待這個事情)

js之所以是異步砚作,因為它是單線程執(zhí)行的語言窘奏,必須有異步
單線程:一次只能干一件事(一次不能同時干兩件事),如果想只能是一個一個排隊來葫录,每個函數拿來就坐著着裹,哪行程序拿來就執(zhí)行哪一行

eg:1.打印順序:100--300---200
    /*
    *執(zhí)行第一行打印100;
    *執(zhí)行setTimeout后米同,傳入setTimeout的函數會被暫存起來骇扇,不會立即執(zhí)行(單線程的特點,不能同時干兩件事)窍霞;
    *執(zhí)行最后一行匠题,打印300;
    *待所有程序執(zhí)行完但金,處于空閑狀態(tài)時韭山,會立馬看有沒有暫存起來的要執(zhí)行;
  *發(fā)現暫存起來的setTimeout中的函數無序等待時間,就立即過來行钱磅。
    */
    
    console.log(100);
    
    //setTimeout是異步的場景梦裂,所有的異步的陳述都會被拿出去暫時不執(zhí)行
    //setTimeout函數是個異步,把它其中的函數拿出來盖淡,放一邊等著年柠;
    在往下執(zhí)行完300,這個時候確定程序都已經執(zhí)行完之后褪迟,在把之前那個函數拿過來看看;確認它是不是可以立即執(zhí)行冗恨,因為這個setTimeout這個后邊沒有加等待時間,它可以立即執(zhí)行味赃,那200執(zhí)行
    
    setTimeout(function(){
        console.log(200);
    });
    console.log(300);

eg:2.setTimeout有延遲時間
    //打印順序:100--setTimeout里面函數先暫存起來--300--一秒鐘之后執(zhí) 行setTimeout打印200
    console.log(100);
    setTimeout(function(){
        console.log(200);
    },1000);
    console.log(300);
    
eg:3.ajax 
    //打酉颇ā:start--發(fā)送請求之后等待,里面函數暫存起來--end--發(fā)送請求
    回來之后執(zhí)行打印data
    console.log('start');
    $.get('./data1.json',function(data){
        console.log(data);
    });
    console.log('end');
    
eg:4.事件
    //打有乃住:start--綁定事件的回調函數暫存起來--end--點擊的時候才能解封執(zhí)行clicked
    console.log('start');
    document.getElementById('btn1').addEventListener('click',function(){
        alert('clicked');
        
    });
    console.log('end');
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末傲武,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子城榛,更是在濱河造成了極大的恐慌揪利,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狠持,死亡現場離奇詭異疟位,居然都是意外死亡,警方通過查閱死者的電腦和手機工坊,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門献汗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敢订,“玉大人王污,你說我怎么就攤上這事〕纾” “怎么了昭齐?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矾柜。 經常有香客問我阱驾,道長,這世上最難降的妖魔是什么怪蔑? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任里覆,我火速辦了婚禮,結果婚禮上缆瓣,老公的妹妹穿的比我還像新娘喧枷。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布隧甚。 她就那樣靜靜地躺著车荔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戚扳。 梳的紋絲不亂的頭發(fā)上忧便,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音帽借,去河邊找鬼珠增。 笑死,一個胖子當著我的面吹牛砍艾,可吹牛的內容都是我干的切平。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辐董,長吁一口氣:“原來是場噩夢啊……” “哼悴品!你這毒婦竟也來了?” 一聲冷哼從身側響起简烘,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤苔严,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孤澎,有當地人在樹林里發(fā)現了一具尸體届氢,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年覆旭,在試婚紗的時候發(fā)現自己被綠了退子。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡型将,死狀恐怖寂祥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情七兜,我是刑警寧澤丸凭,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站腕铸,受9級特大地震影響惜犀,放射性物質發(fā)生泄漏。R本人自食惡果不足惜狠裹,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一虽界、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涛菠,春花似錦莉御、人聲如沸刹缝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梢夯。三九已至,卻和暖如春晴圾,著一層夾襖步出監(jiān)牢的瞬間颂砸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工死姚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留人乓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓都毒,卻偏偏與公主長得像色罚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子账劲,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容