欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

寫給小白看的JavaScript異步

 更新時間:2017年11月29日 17:07:40   作者:TeanLee  
寫給小白看的JavaScript異步,具有一定的參考價值,感興趣的小伙伴們可以參考一下

某天突然寫了個方法要從后臺調用數(shù)據(jù),顯示在前臺頁面,但是輸出結果總是空undefined,得不到數(shù)據(jù)。多方找資料才發(fā)現(xiàn),原來是入了JS異步的“坑”。

我們常常聽到單線程、多線程、同步、異步這些概念,那么這些東西到底是什么呢?
那么我們先從上面那幾個概念說起

單線程、多線程、同步、異步基本理解

每個正在運行的程序(即進程)至少有一個線程,被稱為主線程。主線程在啟動程序時被創(chuàng)建,用于執(zhí)行main函數(shù)。

1.單線程就是只有一個主線的線程,代碼從上往下順序運行,主線程負責執(zhí)行程序的所有代碼(UI展現(xiàn)以及刷新,網絡請求,本地存儲等等)【一個線程要做所有的事情,想想都有點累呢】

2.多線程顧名思義,就是有多個線程的程序,可以由用戶自主創(chuàng)建。用戶自主創(chuàng)建的若干進程相對于主線程而言就是子線程。子線程和主線程都是獨立的運行單元,各自的執(zhí)行互不影響,因此能夠并發(fā)執(zhí)行。

光聽這些干巴巴的理論是不是覺得有點暈? 巧了,我乍一看的時候也暈。

在找資料的過程中,我發(fā)現(xiàn)了別人的這么一個形象的比喻。

打個比方,單線程就是你去廚房又燒飯又燒菜,一個人來回跑;多線程就是兩個人,一個單做飯,一個單做菜。

這么說,應該更好理解了吧?

而什么又是同步和異步呢?

我們用一個簡單的生活例子來說明。

你打電話訂酒店,問工作人員有沒有房間,這時候,工作人員需要查找有沒有房間才能回答你。

同步就是不掛電話一直等,直到工作人員告訴你有沒有房間。
異步就是掛斷電話,你去做別的事情,比如吃飯喝水,工作人員查到了信息再打電話告訴你。

那么我們的主題來了

JS的異步操作是怎樣的呢?

JS的執(zhí)行環(huán)境是單線程的,也就是說,程序順序執(zhí)行下來,一次只能執(zhí)行一個任務,程序想要往下運行,就必須等待當前的任務執(zhí)行完畢,不管當前的任務要執(zhí)行多久(要是后面的程序急著跑出來可真的是等的很難受呢)。

為了解決后面程序等的難受的這個阻塞問題。JavaScript有一種異步處理模式,其實就是延時處理。

我們再來拋出例子來說明。

var getUserInfo = function () {
      $.getJSON("http://www.easy-mock.com/mock/5a09868228b23066479b8379/ajaxData/getUserInfo", function () {
        return data;
      });
    }
    var data = getUserInfo();
    renderUserInfo(data)

getUserInfo這個函數(shù)被調用,要取后臺取數(shù)據(jù),可能要耗費很多時間,這就要讓renderUserInfo一直等著,直到取出data才能運行。幸好JS有異步操作,取數(shù)據(jù)的時候,不用renderUserInfo一直等著data取出來,而是直接執(zhí)行。

這么說的話,那么這兩個函數(shù)到底是什么順序執(zhí)行的吶?不急,我們來調試一下:

var getUserInfo = function () {
      console.log('aaa');
      $.getJSON("http://www.easy-mock.com/mock/5a09868228b23066479b8379/ajaxData/getUserInfo", function () {
        console.log('bbb');
        return data;
      });
    }
    var data = getUserInfo();
    console.log(data);
    console.log('ccc');
    renderUserInfo(data);

順序執(zhí)行下來的輸出原以為是"aaa","bbb","ccc"吧?

然而事情并沒有這么簡單。我們來看一下控制臺的輸出:


輸出的結果竟然不是順序的。

也就是說函數(shù)執(zhí)行到getJSON取數(shù)據(jù)的時候,程序并沒有等它取出數(shù)據(jù)再執(zhí)行下一步,而是跳過了取數(shù)據(jù)這一個階段,直接執(zhí)行輸出data了,因此,data也為空。

這就是JS的異步機制了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 微信小程序中使用自定義圖標(阿里icon)的方法

    微信小程序中使用自定義圖標(阿里icon)的方法

    這篇文章主要介紹了微信小程序中使用自定義圖標(阿里icon)的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 使用typescript改造koa開發(fā)框架的實現(xiàn)

    使用typescript改造koa開發(fā)框架的實現(xiàn)

    這篇文章主要介紹了使用typescript改造koa開發(fā)框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • js中如何復制一個數(shù)組(淺復制、深復制)

    js中如何復制一個數(shù)組(淺復制、深復制)

    這篇文章主要介紹了js中如何復制一個數(shù)組(淺復制、深復制)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • js 賦值包含單引號雙引號問題的解決方法

    js 賦值包含單引號雙引號問題的解決方法

    這篇文章主要介紹了js賦值包含單引號雙引號問題的解決方法,需要的朋友可以參考下
    2014-02-02
  • JS基于遞歸實現(xiàn)倒計時效果的方法

    JS基于遞歸實現(xiàn)倒計時效果的方法

    這篇文章主要介紹了JS基于遞歸實現(xiàn)倒計時效果的方法,結合實例形式分析了javascript基于遞歸算法實現(xiàn)倒計時功能的相關操作技巧,需要的朋友可以參考下
    2016-11-11
  • js編寫貪吃蛇的小游戲

    js編寫貪吃蛇的小游戲

    本文為大家介紹的是使用JS寫的貪吃蛇游戲,個人練習之用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望對大家學習js有所幫助
    2015-12-12
  • JS實現(xiàn)簡單表格排序操作示例

    JS實現(xiàn)簡單表格排序操作示例

    這篇文章主要介紹了JS實現(xiàn)簡單表格排序操作,結合具體實例形式分析了JavaScript事件響應及table表格動態(tài)操作相關技巧,需要的朋友可以參考下
    2017-10-10
  • js實現(xiàn)購物車加減和價格運算

    js實現(xiàn)購物車加減和價格運算

    這篇文章主要為大家詳細介紹了js實現(xiàn)購物車加減和價格運算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JavaScript焦點事件、鼠標事件和滾輪事件使用詳解

    JavaScript焦點事件、鼠標事件和滾輪事件使用詳解

    這篇文章主要介紹了JavaScript焦點事件、鼠標事件和滾輪事件使用詳解,通過示例給大家講解的非常細致,有需要的小伙伴可以參考下。
    2016-01-01
  • javascript實現(xiàn)網頁字符定位的方法

    javascript實現(xiàn)網頁字符定位的方法

    這篇文章主要介紹了javascript實現(xiàn)網頁字符定位的方法,實例分析了javascript頁面元素查找與定位的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07

最新評論