7

我在 index.html 中有以下内容:

<html><body><pre>
<script src="program.js"></script>
</pre></body></html>

以及 program.js 中的以下内容:

document.writeln(JSON.stringify(name));
name = "Bob";

第一次打开 index.html,产生了(输出 A):

> ""

然后,在刷新页面后,生成(输出 B):

> "Bob"

我从来没有在 Firefox 中看到输出 B。

回到 Chrome:但是,如果我使用“name”以外的其他变量,例如“val”:

document.writeln(JSON.stringify(val));
val = "Bob";

我得到一个例外:

Uncaught ReferenceError: val is not defined 

因此,由于“名称”恰好在全局范围内,我认为 Chrome 会以某种方式记住旧页面加载中的全局变量,并在新页面加载中设置这些变量的默认值。但是,如果我改用全局变量“状态”,我总是会看到输出 A。

为什么会这样?

4

1 回答 1

2

看起来name全局上下文中的变量是 chrome 中的某种保留名称。这同样适用于变量,status因为它们只能String取值。

name属性指的是窗口对象的名称,只要窗口处于活动状态,该对象就会被持久化,因此该值在多个文档之间共享。

例如:var status = {}; alert(status)将警告[Object object]name也相同。

我没有任何参考文档来提供这种行为,但我注意到我的一个项目的错误报告导致了一些事情。

于 2013-01-10T03:28:53.380 回答