You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置window.location.href后旧页面的JavaScript代码是否会停止运行?

问题原因

修改window.location.href或者调用window.location.assign()触发页面跳转时,不会立即终止当前正在运行的JavaScript脚本,这是符合HTML规范的预期行为:

  • 导航类操作属于浏览器的异步宏任务,会被加入事件循环队列等待执行
  • 只有当前同步JavaScript执行栈完全清空、所有待处理微任务执行完毕后,浏览器才会开始处理页面跳转的流程

因此你示例中的代码在触发跳转设置后,仍会继续向下执行id.split("-")的逻辑,自然会因为id为假值抛出异常。

解决方案

要避免后续错误代码执行,只需要在触发跳转后终止当前执行上下文的运行即可,常见实现方案有两种:

  • 单层函数调用场景下,在跳转逻辑后直接return终止当前函数运行
function handleError() {
    window.location.href = "https://example.com"
}

function doWork(id) {
    if (!id) {
        handleError();
        // 终止后续逻辑执行
        return;
    }
    var oops = id.split("-");
    // 后续逻辑不会在id为空时执行
}
  • 多层函数嵌套调用场景下,可以通过抛出自定义错误的方式终止整个执行链
function handleError() {
    window.location.href = "https://example.com"
    // 抛出错误终止整个执行链
    throw new Error('触发页面跳转,终止后续代码执行')
}

function doWork(id) {
    if (!id) {
        handleError();
    }
    // 后续逻辑不会执行
    var oops = id.split("-");
}
补充说明

该行为在所有现代浏览器中都是统一实现的,不存在兼容性差异。所有浏览器级别的导航、页面重绘操作优先级都低于当前正在执行的同步JS和微任务,永远不会打断当前同步代码的运行。

内容的提问来源于stack exchange,提问作者pdoherty926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:57:02