最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中從setTimeout與setInterval到AJAX異步

 更新時間:2017年02月13日 14:35:30   作者:Binnear  
這篇文章主要介紹了JavaScript中從setTimeout與setInterval到AJAX異步,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

setTimeout與setInterval執(zhí)行

  首先我們看一下以下代碼打印結(jié)果

console.log(1);
setTimeout(function() { console.log(2); },100)
setTimeout(function() { console.log(3); },50)
console.log(4);

  打印結(jié)果是 1、4、3、2,你可能覺得理所應當,那我們再看下下面這個例子

console.log(1);
setTimeout(function() { console.log(2); },0)
console.log(3);

  這次的結(jié)果又會是什么呢?

  1、3、2,不是1、2、3。到這里你可能會有疑惑了,明明定時器設(shè)置的時間為0,而且瀏覽器解析js是按照從上到下執(zhí)行的,應該是1、2、3才對???

  到這里我們要提一下瀏覽器的線程問題。

  與js相關(guān)的瀏覽器線程有三個(注意:js解析是單線程) - js代碼執(zhí)行線程( 主線程 ) - UI渲染線程 - 事件循環(huán)線程

  其中js代碼執(zhí)行線程與UI渲染線程兩者是互斥的,也就是說js代碼執(zhí)行線程運行的時候,UI渲染線程會停止工作,這樣做也是為了防止js中的DOM操作會導致兩線程沖突;而事件循環(huán)線程比較特殊,接下來會根據(jù)setTimerout的執(zhí)行過程進行講解其作用。

  回到上面的第一道題目

console.log(1);
 setTimeout(function() { console.log(2); },100)
 setTimeout(function() { console.log(3); },50)
 console.log(4);

   執(zhí)行過程:

js主線程運行,遇到console.log(1),直接運行,在控制臺輸出結(jié)果;

主線程繼續(xù)運行,然后遇到第一個setTimeout,接著setTimeout中的回調(diào)函數(shù)會被放入到一個事件隊列中(這里的事件隊里可以想象成一個備忘錄,里面記錄的全是一些需要做而未做的事);

遇到第二個setTimeout,其中的回調(diào)函數(shù)依然被加入到事件隊列中;

執(zhí)行console.log(4),到這里主線程的任務全部執(zhí)行完畢,除了setTimeout里面的回調(diào)函數(shù);

這個時候,我們還未說明的事件循環(huán)線程開始工作,它會去循環(huán)遍歷事件隊列(也就是我們的備忘錄),如果事件隊列中有回調(diào)函數(shù),它就會將事件隊列中的回調(diào)函數(shù)重新交給主線程;

主線程收到回調(diào)函數(shù),然后開始執(zhí)行函數(shù)體。(這里要注意,因為兩個setTimeout本身有執(zhí)行時間,所以在這里的時候就會根據(jù)時間的長短按順序執(zhí)行啦。)

  setInterval原理與之相同,不作另說。

  總的來說,setTimeout與setInterval的執(zhí)行會等到主線程的所有任務全部執(zhí)行后,才會再執(zhí)行其中的回調(diào)函數(shù),所以在使用它們的時候也要注意,特別是在主線程中有特別耗時的任務的時候,兩種定時器會被不可預測的延后。

  講到這里,大家有沒有想到什么呢?

  恩,就是異步,setTimeout的執(zhí)行有沒有一點異步的感覺呢?但又因為它必須是等到主線程全部執(zhí)行完才會執(zhí)行,所以可以稱之為偽異步。

  說到異步,我們還會想到AJAX,都說AJAX是異步,但是它異步的原理想必還不清楚的你應該有點興趣了解的。

  異步:簡單說就是在處理某一件事的時候還可以去做別的事,比如:你在銀行取號后等待取錢,在等待的過程中你還可以玩手機,和別人聊天等等,這個過程就是異步的。

AJAX 異步的原理

發(fā)送一個AJAX請求的時候,瀏覽器會有一個專門的線程來進行該任務;

而在AJAX中也是有回調(diào)函數(shù)的,比如請求成功后的回調(diào),失敗后的回調(diào),這些回調(diào)函數(shù)與setTimeout中的回調(diào)一樣會被推入到事件隊列中;

瀏覽器接會再次提供一個縣城接收AJAX請求返回的數(shù)據(jù);

事件循環(huán)線程這時候知道事件隊列中AJAX的回調(diào)函數(shù)能夠被執(zhí)行了,遍歷事件隊列,將其中的回調(diào)函數(shù)交回給js主線程;

主線程執(zhí)行AJAX回調(diào)函數(shù)內(nèi)部代碼。

  總的說來,AJAX的請求不會干擾到主線程任務的執(zhí)行,它有自己專供的線程來處理其任務,就像是瀏覽器的親兒子~~~

以上所述是小編給大家介紹的JavaScript中從setTimeout與setInterval到AJAX異步,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 如何在TypeScript?中實現(xiàn)接口的類

    如何在TypeScript?中實現(xiàn)接口的類

    這篇文章主要介紹了TypeScript?中實現(xiàn)接口的類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素

    JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素

    窗口固定位置顯示元素,當頁面高度大于某高度,并且頁面向下滾動時,顯示該元素;當頁面位置小于某高度,或者頁面向上滾動時,隱藏該元素,下面通過本文給大家介紹JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素,需要的朋友參考下吧
    2016-02-02
  • 你的編程語言可以這樣做嗎?

    你的編程語言可以這樣做嗎?

    你的編程語言可以這樣做嗎?...
    2006-09-09
  • JavaScript面試必備之垃圾回收機制和內(nèi)存泄漏詳解

    JavaScript面試必備之垃圾回收機制和內(nèi)存泄漏詳解

    垃圾回收機制和內(nèi)存泄漏是JavaScript面試時常常問到的問題,這篇文章就為大家詳細整理了他們的相關(guān)知識,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • js實現(xiàn)表格的隔行變色和上下移動

    js實現(xiàn)表格的隔行變色和上下移動

    這篇文章主要為大家詳細介紹了js實現(xiàn)表格的隔行變色和上下移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Bootstrap 模態(tài)框多次顯示后臺提交多次BUG的解決方法

    Bootstrap 模態(tài)框多次顯示后臺提交多次BUG的解決方法

    本篇文章主要介紹了Bootstrap 模態(tài)框多次顯示后臺提交多次BUG的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • JS設(shè)計模式之中介者模式使用方法詳解

    JS設(shè)計模式之中介者模式使用方法詳解

    JavaScript中介者模式是一種行為型設(shè)計模式,用于降低多個對象之間的耦合性,在中介者模式中,多個對象之間不直接相互通信,而是通過中介者進行通信, 本文就來給大家詳細的介紹一下JS設(shè)計模式之中介者模式使用方法,需要的朋友可以參考下
    2023-08-08
  • 小試JavaScript多線程

    小試JavaScript多線程

    這兩天一直在弄ajax,用多了才發(fā)現(xiàn)了ajax?的cache問題,請求了好多次,得到了確是相同的結(jié)果,經(jīng)常我想在請求的同時去做一些其它的事情,我在想javascript里有沒有辦法用多線程,經(jīng)過在網(wǎng)上查找找到了結(jié)果。
    2008-11-11
  • Layui點擊圖片彈框預覽的實現(xiàn)方法

    Layui點擊圖片彈框預覽的實現(xiàn)方法

    今天小編就為大家分享一篇Layui點擊圖片彈框預覽的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 前端JavaScript獲取電池信息

    前端JavaScript獲取電池信息

    受到同事啟發(fā),突然發(fā)現(xiàn)了幾個有趣又實用的web api,下面這篇文章主要給大家介紹了關(guān)于前端JavaScript獲取電池信息的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04

最新評論

新巴尔虎右旗| 新巴尔虎左旗| 莱西市| 从化市| 专栏| 天水市| 莆田市| 泸州市| 义马市| 长治市| 江津市| 昂仁县| 定州市| 永清县| 广安市| 阳高县| 全椒县| 新丰县| 宜章县| 安徽省| 巴东县| 塔河县| 准格尔旗| 连州市| 南岸区| 彝良县| 兴仁县| 德钦县| 临夏市| 满城县| 华亭县| 普定县| 丹东市| 五寨县| 岳阳县| 阜南县| 隆子县| 英吉沙县| 田林县| 怀柔区| 香格里拉县|