昨天一朋友和我聊到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了另外一個問題, 那就是異步了