Window.history.back()与history.back()及相关接口API的区别是什么?
window.history.back() 与 history.back() 的区别 二者在默认全局作用域下没有任何功能差异,本质是同一个方法的不同写法:
- 浏览器中
window是顶层全局对象,所有挂载在window下的属性都可以省略window.前缀直接调用,history本身就是window.history的引用,所以history.back()就是window.history.back()的简写。 - 唯一的例外场景是你在局部作用域内自定义了命名为
history的变量,此时局部作用域下的history.back()会优先调用你自定义的变量方法,和全局的历史回退逻辑无关。比如下面的代码就会出现非预期结果:
function test() { const history = { back: () => console.log('自定义逻辑') } history.back() // 输出"自定义逻辑",不会触发页面回退 } test()
window.history API 与 History 接口的核心差异 这二者是「实例」和「类模板」的关系,核心区别如下:
- History 接口是浏览器规范定义的抽象标准模板,它规定了会话历史管理相关的所有属性、方法的定义规则,比如
back()、pushState()、state、length等能力的参数、返回值、行为逻辑都由这个接口统一定义,本身不能被开发者直接实例化使用。 window.history是浏览器基于History接口创建的具体实现实例,挂载在全局window对象上,对应当前标签页的专属会话历史栈,开发者所有实际的历史操作逻辑,都是调用这个实例上的属性方法完成的。
你可以在控制台执行console.log(window.history instanceof History),返回结果为true,就能直接验证二者的从属关系。
内容的提问来源于stack exchange,提问作者user14610044
相关产品推荐
相关产品推荐

