作為剛接觸程式設計師小白,我們經常會遇到一些很簡單的問題,但是我們不知道怎麼回事,就像你要從後台調用數據,顯示在前台頁面,但是輸出結果總是空undefined,得不到數據。這是什麼原因呢?多方找資料才發現,原來是入了JS非同步的「坑」。沒錯這篇文章我們主要跟大家分享一下JS的非同步操作是怎麼樣的。
我們常常聽到單執行緒、多執行緒、同步、非同步這些概念,那麼這些東西到底是什麼呢?
那麼我們先從上面那幾個概念說起
單執行緒、多執行緒、同步、非同步基本理解
非同步就是掛斷電話,你去做別的事情,例如吃飯喝水,工作人員查到了訊息再打電話告訴你。
var getUserInfo = function () { $.getJSON("http://www.easy-mock.com/mock/5a09868228b23066479b8379/ajaxData/getUserInfo", function () { return data; }); } var data = getUserInfo(); renderUserInfo(data)getUserInfo這個函數被調用,要取後台取數據,可能要耗費很多時間,這就要讓renderUserInfo一直等著,直到取出data才能運行。幸好JS有非同步操作,取資料的時候,不用renderUserInfo一直等data取出來,而是直接執行。 這麼說的話,那麼這兩個函數到底是什麼順序執行的吶?不急,我們來調試:
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);順序執行下來的輸出原以為是"aaa","bbb","ccc"吧? 然而事情並沒有這麼簡單。我們來看一下控制台的輸出:輸出的結果竟然不是順序的。
以上是什麼是JavaScript異步的詳細內容。更多資訊請關注PHP中文網其他相關文章!