网页消息回调函数能否在前置函数执行完成前启动运行?
网页消息触发函数的执行顺序问题解答
嘿,这个问题问得挺实在的!答案是肯定的——你写的some_func里面的代码一定会在下一次这个函数被触发执行前完全跑完。
为啥呢?因为浏览器里的JavaScript是单线程执行的,所有的事件回调都得按规矩走事件循环那一套。哪怕some_message消息一股脑儿快速连续过来,它们对应的回调任务都会被放进事件队列里乖乖排队,绝对不会出现"后面的回调抢在前面的回调没跑完就开始执行"的情况。只有当前正在运行的some_func执行完,主线程空下来了,才会从队列里取下一个任务来执行。
给你再贴一遍你的代码,看得更清楚:
document.addEventListener('some_message', some_func, false); function some_func (data){ // 这里的代码总会在下一次函数执行前完成运行 }
哦对了,要是你在some_func里加了异步操作(比如setTimeout、网络请求这类),那异步操作的回调也是要等当前函数跑完、主线程空闲后才会进队列等待执行,根本不会打断当前函数的正常运行。
内容的提问来源于stack exchange,提问作者rigger12
相关产品推荐
相关产品推荐

