首先你这里存在一个误解,`watchEffect` 不是和页面产生的绑定关系,而是传入 `watchEffect` 的回调函数与函数中用到的`响应式状态`产生的绑定关系,也就是所谓的依赖搜集 关键在这里,你定义了一个无法回收的 `setInterval`,页面拉起来后将一直运行,而你 A -> B 只是单纯的前端路由跳转,本质还是同一个页面,所以不会影响 `setInterval` 持续运行, `setInterval` 没有被清理掉,`count` 就会一直变,继而 `watchEffect` 的回调也会一直执行 setInterval(() => { count.value++; // 不停 +1 console.log("count.value", count.value); }, 1000); 要解决这个现象么在跳转路由前清理掉 `setInterval`,要么 stop 掉 `watchEffect`, 但按照你这种用法,两个都应该清理,因为这里 `watchEffect` 的回调引用的是一个全局的响应式状态,不手动 stop 掉的话,跳转路由后该回调函数所占用的内存是无法被回收的 另外,还有一个细节,同步的 `watchEffect` 会挂在组件实例上,随组件销毁而销毁;而异步创建的需要手动清理,具体看官方文档 