Chrome中奇怪的javascript记忆

Rob*_*obz 7 javascript google-chrome

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

<html><body><pre>
<script src="program.js"></script>
</pre></body></html>
Run Code Online (Sandbox Code Playgroud)

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

document.writeln(JSON.stringify(name));
name = "Bob";
Run Code Online (Sandbox Code Playgroud)

首次打开index.html,生成(输出A):

> ""
Run Code Online (Sandbox Code Playgroud)

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

> "Bob"
Run Code Online (Sandbox Code Playgroud)

我在Firefox中看不到输出B.

回到Chrome:但是,如果我使用除'name'之外的其他变量,例如'val':

document.writeln(JSON.stringify(val));
val = "Bob";
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

Uncaught ReferenceError: val is not defined 
Run Code Online (Sandbox Code Playgroud)

因此,由于"名称"恰好位于全球范围内,我认为Chrome以某种方式记住旧页面加载中的全局变量,并在新页面加载中设置这些变量的默认值.但是,如果我使用全局变量'status',我总是看到输出A.

为什么会这样?

Aru*_*hny 2

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

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

例如:var status = {}; alert(status)也会发出[Object object]同样的警报name

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