我是前端萌新。下面这段代码打开网页后会一直刷新:
<!DOCTYPE html>
<html>
<head> </head>
<body>
<script>
var location = window.location;
</script>
</body>
</html>
如果把 var location = window.location;
注释了就不会一直刷新网页了。
到底是什么问题?
我是前端萌新。下面这段代码打开网页后会一直刷新:
<!DOCTYPE html>
<html>
<head> </head>
<body>
<script>
var location = window.location;
</script>
</body>
</html>
如果把 var location = window.location;
注释了就不会一直刷新网页了。
到底是什么问题?
8 回答5.9k 阅读✓ 已解决
9 回答9.3k 阅读
6 回答4.9k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
5 回答8k 阅读✓ 已解决
3 回答10.4k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
因为最顶层的 var 变量会隐式挂到 globalThis 上(对于浏览器来说就是
window
)。所以你这段代码就等效于
window.location = xxx
后面的 xxx 其实不重要,总之你就是给 location 重新赋值了,自然触发浏览器去载入新的 location 了。而你这个新的 location 跟旧的指向的还是同一个,所以就一直在刷新当前页面。所以要么你换成 let/const 去声明,这样就不会被挂到 globalThis 上:
要么你用个 IIFE 给它包起来,别直接在最顶层声明:
当然了,更稳妥的方式其实是不要用浏览器本身内置的 BOM 全局对象去充当变量名……