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

寫給小白看的JavaScript異步

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

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

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

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

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

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

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

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

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

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

這么說,應(yīng)該更好理解了吧?

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

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

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

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

那么我們的主題來了

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

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

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

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

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

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

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

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"吧?

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


輸出的結(jié)果竟然不是順序的。

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

這就是JS的異步機(jī)制了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS動態(tài)插入腳本和插入引用外部鏈接腳本的方法

    JS動態(tài)插入腳本和插入引用外部鏈接腳本的方法

    js 動態(tài)插入腳本的是在頁面加載時不存在,但將來的某一時刻通過修改該 DOM 動態(tài)添加的腳本。接下來通過本文給大家介紹JS動態(tài)插入腳本和插入引用外部鏈接腳本,需要的朋友可以參考下
    2018-05-05
  • 詳解在HTTPS 項(xiàng)目中使用百度地圖 API

    詳解在HTTPS 項(xiàng)目中使用百度地圖 API

    這篇文章主要介紹了在HTTPS 項(xiàng)目中使用百度地圖 API,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • H5實(shí)現(xiàn)中獎記錄逐行滾動切換效果

    H5實(shí)現(xiàn)中獎記錄逐行滾動切換效果

    這篇文章主要為大家詳細(xì)介紹了H5實(shí)現(xiàn)中獎記錄逐行滾動切換效果,利用定時器實(shí)現(xiàn)中獎記錄逐行展示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • javascript數(shù)據(jù)類型中的一些小知識點(diǎn)(推薦)

    javascript數(shù)據(jù)類型中的一些小知識點(diǎn)(推薦)

    這篇文章主要介紹了javascript數(shù)據(jù)類型中的一些小知識點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • js給onclick事件賦值,動態(tài)傳參數(shù)實(shí)例解說

    js給onclick事件賦值,動態(tài)傳參數(shù)實(shí)例解說

    js動態(tài)給對象onclick事件賦值,動態(tài)傳參數(shù)舉兩個例子一對一錯,感興趣的朋友可以對比下,希望可以從中發(fā)現(xiàn)不一樣之處
    2013-03-03
  • 詳解JavaScript是如何驗(yàn)證URL的

    詳解JavaScript是如何驗(yàn)證URL的

    當(dāng)開發(fā)者需要為不同目的以不同形式處理URL時,我們經(jīng)常會借助于JavaScript。本文就為大家整理了JavaScript驗(yàn)證URL的方法,希望對大家有所幫助
    2023-02-02
  • js綜合應(yīng)用實(shí)例簡單的表格統(tǒng)計

    js綜合應(yīng)用實(shí)例簡單的表格統(tǒng)計

    在做調(diào)查問卷的過程中,遇到一個表格的統(tǒng)計問題,一個需要用到j(luò)s方面的綜合知識,感覺還不錯所以記錄下來與大家分享,感興趣的朋友可以了解下
    2013-09-09
  • webpack-bundle-analyzer?插件配置使用方法

    webpack-bundle-analyzer?插件配置使用方法

    webpack-bundle-analyzer?是?webpack?的插件,需要配合?webpack?和?webpack-cli?一起使用,這篇文章主要介紹了webpack-bundle-analyzer?插件配置,需要的朋友可以參考下
    2023-02-02
  • 淺析Bootstrap縮略圖組件與警示框組件

    淺析Bootstrap縮略圖組件與警示框組件

    縮略圖在網(wǎng)站中最常用的就是產(chǎn)品列表頁面,一行顯示幾張圖片,有的在圖片底下帶有標(biāo)題、描述內(nèi)容、按鈕等信息。本文給大家介紹Bootstrap縮略圖組件與警示框組件,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)介紹

    java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)介紹

    對象轉(zhuǎn)為字符串:通過JSON.encode方法,這個是json.js里面的方法,引入到當(dāng)前文件就可以了,下面整理的比較詳細(xì)一點(diǎn),感興趣的朋友不要錯過
    2013-10-10

最新評論

中宁县| 南平市| 修武县| 通化县| 鲁甸县| 济南市| 称多县| 那坡县| 军事| 晋宁县| 长寿区| 浦北县| 年辖:市辖区| 博乐市| 黔南| 崇阳县| 杨浦区| 新野县| 鹿邑县| 吉隆县| 合作市| 玉山县| 遵义市| 苗栗市| 河津市| 皮山县| 牙克石市| 台山市| 东乡| 桦甸市| 通州市| 赞皇县| 彝良县| 松桃| 博白县| 天全县| 江都市| 广平县| 原平市| 仙居县| 宜城市|