一梦七年。
一派青春撞了南墙,一生热爱回头太难。
文章 20
标签 29
分类 11
异步执行的location.href

异步执行的location.href

异步执行的location.href

今天在做一个页面跳转的时候遇到了一个小坑,记录一下。

大概的流程是,使用location.href进行页面跳转,如下代码:

// main.js

//...前略
location.href = 'https://www.baidu.com';

console.log('按理说这句console代码不会执行了');

我习惯性的以为,既然已经先执行页面跳转,那么后面那句代码应该不会执行了才对,然而,页面跳转了,后面的代码也执行了。

为什么会是这样的呢?我也不知道啊,所以我就去查了谷歌,查到很多文章,都是说location.href进行跳转,任然会继续执行后续代码,所以如果不想后面代码继续执行必须加个return等阻止代码继续执行。

所以知道要怎么处理了,但还是很懵逼啊,还是不知道为啥会这样啊。但是知道了会先执行完后续代码再跳转,那这不是很像异步这个东西吗?于是我接着又查了下location.href的相关资料,在知乎上看到有前辈做了解释:

因为 LocationChange 行为在浏览器内核中是起定时器异步执行的。 异步执行的好处是为了防止代码调用过深,导致栈溢出,另外也是为了防止递归进入加载逻辑,导致状态紊乱,保证导航请求是顺序执行的。

真是这样,那就说的通了。想更深入了解原因的可以去查找相关的浏览器内核源码。