请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

nextTick 中遍历 callbacks 问题

老师您好,请问 nextTick 去执行 flushCallbacks 的时候,为什么 const copies = callbacks.slice(0) 要定义一个 callbacks 的副本呢,直接遍历 callbacks 不行吗,这里是有什么特殊逻辑吗图片描述

正在回答

1回答

ustbhuangyi 2019-10-13 23:52:30

因为 callbacks 的执行过程中,如果某个 callback 移除了另一个 callback,那么在遍历的过程中可能会出错,但是 slice 之后,返回的是副本,这种情况下移除的也是原始的 callback,在执行过程不会出错

0 回复 有任何疑惑可以回复我~
  • 提问者 前端_未入门 #1
    请问老师,什么样的情况下会移除另外的 callback 呢,脑补不出来这样的场景,希望老师指点。
    回复 有任何疑惑可以回复我~ 2019-10-14 11:10:15
  • ustbhuangyi 回复 提问者 前端_未入门 #2
    一般情况是不需要的,但是不排除有可能有这种情况,就像 EventEmitter 的实现循环派发事件的时候,也会拷贝一份数组,防止这种情况出现,作为一个框架和库,你不能假设用户的操作,你要做的是尽量确保在一些边界情况下,你的代码还能正常 work。
    回复 有任何疑惑可以回复我~ 2019-10-14 11:21:33
  • 提问者 前端_未入门 #3
    非常感谢老师,辛苦了
    回复 有任何疑惑可以回复我~ 2019-10-14 14:04:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信