博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript, 函数是实现异步的基础
阅读量:5937 次
发布时间:2019-06-19

本文共 1898 字,大约阅读时间需要 6 分钟。

昨天一朋友和我聊到JS中的异步和同步, 后来从异步和同步的问题中得出了函数的另一面, 觉得挺不错, 特此分享一下

====

追梦子: 聊天是同步还是异步

小A: 异步

小A: 和你聊还可以和别人聊

追梦子: 那得看怎么聊,

小A: 那你也没法说我错

追梦子: 你要是等另一个人回答后再回,也就是你一句我一句,那就是同步

小A: 可如果我和你聊着同事也在和别人聊

小A: 就是异步

追梦子: 如果你和对方左一句又一句,不按顺序来,那就是异步

追梦子: 我说你错是因为,你都说是异步

追梦子: 没有说什么情况下才是异步

小A: 不是说左一句右一句 不按顺序就是异步

小A: 而应该是在你输入的情况下 我可以去和别人聊天的呀

追梦子: 对,是这个意思

小A: ?

小A: 我说对了

追梦子: 你说的有理,左一句又一句这说的太范了,不算是异步

小A: 嗯

追梦子: 异步就是不去等待

小A: 对

小A: 同步是顺序执行 但会堵塞 异步解决的堵塞 但也会改变顺序

追梦子: 改变顺序是结果产生的,不要把重点放在顺序上

小A: 嗯嗯

追梦子: 在等待的过程中,可以去做别的事,才是异步的本质,或者异步的价值所在

小A: 那回调函数你有什么要说的么

追梦子: 做完某件事,通知你一下

小A: 并且这件事还得最后做

追梦子: 那不是这样说

追梦子: 又不是非得最后执行这个回调函数

小A: 是要最后执行啊

追梦子: 回调就是,你事先告诉某人,你说xx你做完件事通知下我,当他做完的时候就会告诉你,但是他在告诉完你以后还可以去做别的

追梦子: 所以不存在最后执行一说

追梦子: 你说最后执行,那你有例子?

小A: 我找找

小A: 你看这个 他事先输出this will.... 然后执行fn里的 最后进行回调输出this

小A:

追梦子: 哈哈

追梦子: 你看的是表面

追梦子: 回调函数才没有什么先执行后执行

追梦子: 你想什么时候执行什么时候执行

追梦子: 都是你自己来决定的

追梦子: 虽然看似回调函数是最后执行,但这只是它的表像

追梦子: 你那个ajax,回调函数后面也可以执行别的啊

追梦子: 回调函数就是个很简单的东西,不要想复杂了

小A: 我只能看表面

小A: 我就觉得他是最后执行的

追梦子: 把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数。

追梦子: 就看他写的这句就好了

小A: [强]

追梦子: 其他的都是表面

小A: [白眼]

追梦子: 表面的东西,不同的人就会看成不同的东西

追梦子: 就会产生误解

小A: 好吧

追梦子: 往往他只是说的某一方面,但你却看成是它的一切

追梦子: 就像回调函数

追梦子: 你昨天和我说回调函数,早上路上时想了下关于函数的

小A: 然后呢

追梦子: 发觉以前没意识到一件事,函数有个更重要的

追梦子: 那就是可选择时机

小A: 继续

追梦子: 如果没有这点,异步就不太可能实现

小A: 只要稍微什么一点 我就有点晕 我还是得多看看 多想想

小A: 深入

追梦子: 你想啊。函数是不是可以由你自己决定什么时候去执行

小A: 当然 调用它就执行了

追梦子: 如果没有这点,你说异步还可能吗

追梦子: 如果没有这一点,所有代码就被直接执行了, 也就是只能是同步了

小A: 但是 你只是告诉他什么时候执行 他什么时候执行完你是不知道的 就异步来说

追梦子: 你没理解我的点

小A: 我知道你的意思 咱们可以控制他什么时候去执行 也就实现了异步

追梦子: 这样说也不对, 函数不等于异步, 我的意思是函数是实现异步的基础, 如果没有函数就无法实现异步, 但函数本身并不是异步, 异步的本质是通过多线程来实现的,或者是通过等待时机,以延迟执行来达到目的, 比如JS中的setTimeout, 所以异步不等于函数, 而我说的函数是实现异步的基础就在于, 如果没有函数, 而你又希望在做完某件事再去执行某段代码的话, 那你想想你的代码要么是被直接执行了, 要么是等那件事做完了再去执行另一段代码, 也就是同步的

====

一直以为函数就是代码片段的组合, 然而现在想想函数的作用不仅仅是代码的组合以及重复利用, 另一个目的是可选择执行的时机, 很难想像没有函数的JS会是什么样的, 我想那将会是另一门语言, 另一种的语法

后来想了下, 我当时在聊天时说: "如果你和对方左一句又一句,不按顺序来,那就是异步" 这句其实并没有错, 只是没有表达清楚, 假如你和A两个人聊天, 你先问A了某个问题, 但你并没有等A回复, 而是接着又问A了另一个问题, 那就是异步了

转载地址:http://rtvtx.baihongyu.com/

你可能感兴趣的文章
紫书 习题 11-17 UVa 1670 (图论构造)
查看>>
洛谷P1108 低价购买 (最长下降子序列方案数)(int,long long等 范围)
查看>>
大道至简-第五章-心得体会
查看>>
Python编程从入门到实践,个人笔记
查看>>
哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)F - 苦逼的单身狗
查看>>
oracle数据迁移
查看>>
ArchLinux and LXDE and LXDM
查看>>
对拍--from Altf4
查看>>
JavaScript基础6——全选示例
查看>>
JavaScript基础知识总结(三)
查看>>
【python3】爬取简书评论生成词云
查看>>
HttpApplication、HttpContext、HttpModule、HttpHandler
查看>>
Android Service学习
查看>>
【数据库】sql2008卸载和默认实例的删除 ...
查看>>
SDNU 1086.迷宫问题(bfs标记路径)
查看>>
类的高内聚低耦合
查看>>
怎么下载geventwebsocket
查看>>
React文档(十六)refs和DOM
查看>>
电信计费业务:预后融合OCS到底应该实扣还是虚扣?
查看>>
【算法学习笔记】42.正反DP 填充问题 SJTU OJ 1285 时晴时雨
查看>>