this.$emit 在 Vue 中是作为同步函数执行的。当你在 Vue 组件中调用 this.$emit()
方法时,它会立即触发已注册的事件处理器,而不是等待其他操作完成。这意味着任何紧随 this.$emit() 调用之后的代码都会在 $emit
完成触发事件之前执行。
这一点可以从 Vue 的源码中得到确认。在 Vue 的源码中,$emit
方法的实现显示了它是如何同步地遍历并调用所有注册到特定事件上的回调函数的。具体来说,当 this.$emit(event) 被调用时,Vue
会查找当前组件实例 (vm)
上注册的所有该事件的回调函数(如果存在),然后依次调用它们。这个过程是同步的,即在开始调用下一行代码之前,所有的事件回调都已经被执行完毕。
这是一个简化的示例,说明了 this.$emit 如何工作:
Vue.prototype.$emit = function (event, ...args) {
const vm = this;
let cbs = vm._events[event];
if (cbs) {
cbs.forEach(cb => cb.apply(vm, args));
}
return vm;
};