JavaScript, 函數是實現異步的基礎

昨天一朋友和我聊到JS中的異步和同步, 後來從異步和同步的問題中得出了函數的另外一面, 以爲挺不錯, 特此分享一下html

====ajax

追夢子: 聊天是同步仍是異步多線程

小A: 異步異步

小A: 和你聊還能夠和別人聊函數

追夢子: 那得看怎麼聊,this

小A: 那你也無法說我錯線程

追夢子: 你要是等另外一我的回答後再回,也就是你一句我一句,那就是同步htm

小A: 可若是我和你聊着同事也在和別人聊blog

小A: 就是異步get

追夢子: 若是你和對方左一句又一句,不按順序來,那就是異步

追夢子: 我說你錯是由於,你都說是異步

追夢子: 沒有說什麼狀況下才是異步

小A: 不是說左一句右一句 不按順序就是異步

小A: 而應該是在你輸入的狀況下 我能夠去和別人聊天的呀

追夢子: 對,是這個意思

小A: 😁

小A: 我說對了

追夢子: 你說的有理,左一句又一句這說的太範了,不算是異步

小A: 嗯

追夢子: 異步就是不去等待

小A: 對

小A: 同步是順序執行 但會堵塞 異步解決的堵塞 但也會改變順序

追夢子: 改變順序是結果產生的,不要把重點放在順序上

小A: 嗯嗯

追夢子: 在等待的過程當中,能夠去作別的事,纔是異步的本質,或者異步的價值所在

小A: 那回調函數你有什麼要說的麼

追夢子: 作完某件事,通知你一下

小A: 而且這件事還得最後作

追夢子: 那不是這樣說

追夢子: 又不是非得最後執行這個回調函數

小A: 是要最後執行啊

追夢子: 回調就是,你事先告訴某人,你說xx你作完件事通知下我,當他作完的時候就會告訴你,可是他在告訴完你之後還能夠去作別的

追夢子: 因此不存在最後執行一說

追夢子: 你說最後執行,那你有例子?

小A: 我找找

小A: 你看這個 他事先輸出this will.... 而後執行fn裏的 最後進行回調輸出this

小A: https://www.cnblogs.com/moltboy/archive/2013/04/24/3040213.html

追夢子: 哈哈

追夢子: 你看的是表面

追夢子: 回調函數纔沒有什麼先執行後執行

追夢子: 你想何時執行何時執行

追夢子: 都是你本身來決定的

追夢子: 雖然看似回調函數是最後執行,但這只是它的表像

追夢子: 你那個ajax,回調函數後面也能夠執行別的啊

追夢子: 回調函數就是個很簡單的東西,不要想複雜了

小A: 我只能看表面

小A: 我就以爲他是最後執行的

追夢子: 把函數做爲參數傳入到另外一個函數中。這個函數就是所謂的回調函數。

追夢子: 就看他寫的這句就行了

小A: [強]

追夢子: 其餘的都是表面

小A: [白眼]

追夢子: 表面的東西,不一樣的人就會當作不一樣的東西

追夢子: 就會產生誤解

小A: 好吧

追夢子: 每每他只是說的某一方面,但你卻當作是它的一切

追夢子: 就像回調函數

追夢子: 你昨天和我說回調函數,早上路上時想了下關於函數的

小A: 而後呢

追夢子: 發覺之前沒意識到一件事,函數有個更重要的

追夢子: 那就是可選擇時機

小A: 繼續

追夢子: 若是沒有這點,異步就不太可能實現

小A: 只要稍微什麼一點 我就有點暈 我仍是得多看看 多想一想

小A: 深刻

追夢子: 你想啊。函數是否是能夠由你本身決定何時去執行

小A: 固然 調用它就執行了

追夢子: 若是沒有這點,你說異步還可能嗎

追夢子: 若是沒有這一點,全部代碼就被直接執行了, 也就是隻能是同步了

小A: 可是 你只是告訴他何時執行 他何時執行完你是不知道的 就異步來講

追夢子: 你沒理解個人點

小A: 我知道你的意思 我們能夠控制他何時去執行 也就實現了異步

追夢子: 這樣說也不對, 函數不等於異步, 個人意思是函數是實現異步的基礎, 若是沒有函數就沒法實現異步, 但函數自己並非異步, 異步的本質是經過多線程來實現的,或者是經過等待時機,以延遲執行來達到目的, 好比JS中的setTimeout, 因此異步不等於函數, 而我說的函數是實現異步的基礎就在於, 若是沒有函數, 而你又但願在作完某件事再去執行某段代碼的話, 那你想一想你的代碼要麼是被直接執行了, 要麼是等那件事作完了再去執行另外一段代碼, 也就是同步的

====

一直覺得函數就是代碼片斷的組合, 然而如今想一想函數的做用不只僅是代碼的組合以及重複利用, 另外一個目的是可選擇執行的時機, 很難想像沒有函數的JS會是什麼樣的, 我想那將會是另外一門語言, 另外一種的語法

後來想了下, 我當時在聊天時說: "若是你和對方左一句又一句,不按順序來,那就是異步" 這句其實並無錯, 只是沒有表達清楚, 假如你和A兩我的聊天, 你先問A了某個問題, 但你並無等A回覆, 而是接着又問A了另外一個問題, 那就是異步了

相關文章
相關標籤/搜索