異步

目錄

1牲平,setTimeout
2,一個(gè)簡(jiǎn)單的動(dòng)畫
3朋蔫,異步
4测垛,callback (promiss是callback的優(yōu)化)

1捏膨,setTimeout

用法:全局函數(shù)

  //timeId是返回值,編號(hào)
 var timeId=setTimeout(function(){console.log('1')})
 //'liu'傳給xxx
 var timeId=setTimeout(function(xxx){console.log(xxx)},2000,'liu')

特點(diǎn):
1)function一定是異步執(zhí)行

圖片.png

答案:B

先寫的代碼后執(zhí)行食侮,后寫的代碼先執(zhí)行脊奋,很可能是異步

圖片.png

function一定是異步執(zhí)行

2)那,看下面疙描,1秒時(shí)間诚隙,下面的function會(huì)被執(zhí)行多少次:

   //setInterval每隔指定時(shí)間執(zhí)行一次函數(shù)
   setInterval(function(){console.log(1)},0)

一般來想一秒執(zhí)行很多次,但是實(shí)際上起胰,瀏覽器最小控制時(shí)間4ms久又,再快它就不接受了巫延,IE最小控制時(shí)間15ms

各瀏覽器的delay最小值不同

3)最后理解:

圖片.png
使用setTimeout模擬setInterval
你真的不需要使用setInterval
  setTimeout(function xxx(){
          var date=new Date()
         console.log(date.toString())
       //過了1s再執(zhí)行xxx函數(shù)
         setTimeout(xxx,1000)
    },1000)
知識(shí)點(diǎn)

1)特別注意func和func()的區(qū)別:

setTimeout(xxx(),1000)
拆:
var result=xxx() //返回值:1,'sssss'地消,true
setTimeout(result,1000)

func 只是一個(gè)函數(shù)炉峰,沒有執(zhí)行的函數(shù),同函數(shù)聲明一樣
func() 是在執(zhí)行函數(shù)脉执,他一定有返回值

2)具名函數(shù)名的作用域

圖片.png

2疼阔,一個(gè)簡(jiǎn)單的動(dòng)畫

動(dòng)畫原理:
一秒內(nèi)不斷變化

    var box=document.querySelector('.box')
    move(box,0,300,3000)
    function move(el,start,end,time){
      //1S運(yùn)行10次
      //下面是總時(shí)間里面運(yùn)行的總次數(shù)
      var stepcount=time/1000*10
      //每次運(yùn)行的時(shí)間
      var onesteptime=time/stepcount
      el.style.left=start+'px'
     //記錄運(yùn)行到第幾步了
      var step=0
      setTimeout(function xxx(){
        step+=1
        el.style.left=step/stepcount*(end-start)+'px'
     //移完了
        if(step===stepcount){
          
        }else{
           setTimeout(xxx,onesteptime)
        }
      },onesteptime)
      
    }

那么動(dòng)畫完成怎么辦呢?怎么通知外面動(dòng)畫結(jié)束了
可以:

圖片.png

顯然是不行的半夷,因?yàn)閟etTimeout的執(zhí)行會(huì)被掛起
動(dòng)畫還沒執(zhí)行完婆廊,'結(jié)束'就已近打印出來了
那么怎么辦呢?
解決辦法:
只能通過巫橄,動(dòng)畫結(jié)束的標(biāo)志淘邻,調(diào)用一個(gè)傳進(jìn)來的函數(shù),這個(gè)函數(shù)的輸出結(jié)果在外面顯示

    var box=document.querySelector('.box')
    console.log('開始')
    move(box,0,300,3000,function(){
      console.log('真結(jié)束')
    })
    console.log('結(jié)束')
    function move(el,start,end,time,fn){
      //1S運(yùn)行10次
      //下面是總時(shí)間里面運(yùn)行的總次數(shù)
      var stepcount=time/1000*10
      //每次運(yùn)行的時(shí)間
      var onesteptime=time/stepcount
      el.style.left=start+'px'
      
     //記錄運(yùn)行到第幾步了
      var step=0
      setTimeout(function xxx(){
        step+=1
        el.style.left=step/stepcount*(end-start)+'px'
        if(step===stepcount){
          fn()
        }else{
           setTimeout(xxx,onesteptime)
        }
      },onesteptime)
      
    }
圖片.png

總結(jié):

1湘换,setTimeout不是JS的功能宾舅,他是瀏覽器的功能,JS本身沒有這個(gè)全局變量彩倚,這是瀏覽器提供給JS的API,所以他不算是JS的功能筹我,瀏覽器給JS的功能,鬧鐘不是在JS里面的帆离,這個(gè)鬧鐘是在瀏覽器里面的

2崎溃,setTimeout里面的this是什么?

圖片.png
圖片.png

3盯质,time id是什么?
鬧鐘的編號(hào)概而,99個(gè)鬧鐘呼巷,你要關(guān)閉一個(gè),這時(shí)候就需要鬧鐘的一個(gè)編號(hào)

3赎瑰,異步

圖片.png

模式 => pattern=>套路

圖片.png

AJAX=>Asynchronism Javascript And Xml
AJAJ=>Asynchronism Javascript And Json

JS里面到處都是異步

例子:
1王悍,監(jiān)聽異步


圖片.png
圖片.png

在JS里只有操作DOM不是異步,但是現(xiàn)在有些框架react vue已經(jīng)讓DOM變成異步

圖片.png
靠別人:

1餐曼,setTimeout的異步借助了瀏覽器的鬧鐘
2压储,AJAX是XMLHttpRequest API的一個(gè)接口,完全是由瀏覽提供給JS的功能

圖片.png

說明什么?
JS引擎在同一時(shí)間只能做一件事情

圖片.png
圖片.png
圖片.png

異步ajax沒有返回值源譬,但是它會(huì)有一個(gè)結(jié)果集惋,可以利用這個(gè)結(jié)果傳參給callback函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市踩娘,隨后出現(xiàn)的幾起案子刮刑,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雷绢,死亡現(xiàn)場(chǎng)離奇詭異泛烙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)翘紊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門蔽氨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帆疟,你說我怎么就攤上這事鹉究。” “怎么了鸯匹?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵坊饶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我殴蓬,道長(zhǎng)匿级,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任染厅,我火速辦了婚禮痘绎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肖粮。我一直安慰自己孤页,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布涩馆。 她就那樣靜靜地躺著行施,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魂那。 梳的紋絲不亂的頭發(fā)上蛾号,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音涯雅,去河邊找鬼鲜结。 笑死,一個(gè)胖子當(dāng)著我的面吹牛活逆,可吹牛的內(nèi)容都是我干的精刷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蔗候,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼怒允!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锈遥,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤误算,失蹤者是張志新(化名)和其女友劉穎仰美,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儿礼,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咖杂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚊夫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诉字。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖知纷,靈堂內(nèi)的尸體忽然破棺而出壤圃,到底是詐尸還是另有隱情,我是刑警寧澤琅轧,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布伍绳,位于F島的核電站,受9級(jí)特大地震影響乍桂,放射性物質(zhì)發(fā)生泄漏冲杀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一睹酌、第九天 我趴在偏房一處隱蔽的房頂上張望权谁。 院中可真熱鬧,春花似錦憋沿、人聲如沸旺芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)采章。三九已至,卻和暖如春壶辜,著一層夾襖步出監(jiān)牢的瞬間悯舟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工士复, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翩活。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓阱洪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親菠镇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冗荸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容