窗口对象上的javascript函数在被调用时会替换该窗口的内容吗?(有时??)

Dan*_*ton 3 javascript window function return-value

由于这里不应该枚举的原因,我发现将函数附加到窗口对象可能是有用的.但是,我发现了相当奇怪的行为.

<html><head><script>
function sideEffect() { console.log("Side effect happened. Wewt."); }
window.foo = function() {
    sideEffect();
    return true;
}
window.bar = function() {
    sideEffect();
}
</script></head>
<body>
<a href="javascript:window.foo();">Replaces entire window with "true"</a>
<br />
<a href="javascript:window.bar();">Doesn't</a>
</body></html>
Run Code Online (Sandbox Code Playgroud)

为什么调用具有返回值的函数决定替换窗口的内容?这种情况发生在Firefox和Opera中,但不适用于IE9,Chrome或Safari(均在Win7上测试过).

所以问题是:是否有某种文档指定了这种行为?或者这是FF/Opera中的(已知)错误?


[编辑]有趣的是(根据答案和评论,因此很多)似乎滥用window对象是一个红鲱鱼在这里.

KP *_*lor 7

您的代码运行正常 - 浏览器正在完成您要告诉它的操作.

JavaScript行在Web浏览器的URL栏中有效,浏览器将立即执行它们.(尝试一下:在URL栏中写一个警告框,点击回车,然后看看会发生什么.)通过将JavaScript编写到href锚标签中,您将浏览器的位置(换句话说,URL)设置为那一行JavaScript.因为你的一个函数返回一个值,所以该文件被该值覆盖; 这是正常的浏览器行为.

  • +1,对正在发生的事情的正确解释.所有人需要做的是确保结果是"undefined"或"null"以阻止导航. (2认同)