为什么这段HTML打开的网页会一直刷新?

作者站长头像
站长
· 阅读数 9

我是前端萌新。下面这段代码打开网页后会一直刷新:

<!DOCTYPE html>
<html>
  <head> </head>
  <body>
    <script>
      var location = window.location;
    </script>
  </body>
</html>

如果把 var location = window.location; 注释了就不会一直刷新网页了。

到底是什么问题?

回复
1个回答
avatar
test
2024-06-27

因为最顶层的 var 变量会隐式挂到 globalThis 上(对于浏览器来说就是 window)。

所以你这段代码就等效于 window.location = xxx 后面的 xxx 其实不重要,总之你就是给 location 重新赋值了,自然触发浏览器去载入新的 location 了。而你这个新的 location 跟旧的指向的还是同一个,所以就一直在刷新当前页面。

所以要么你换成 let/const 去声明,这样就不会被挂到 globalThis 上:

const location = window.location;

要么你用个 IIFE 给它包起来,别直接在最顶层声明:

;(function () {
    var location = window.location;
})();

当然了,更稳妥的方式其实是不要用浏览器本身内置的 BOM 全局对象去充当变量名……

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容