我在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
因此,由于“name”恰好在全局范围内,我认为Chrome从旧页面加载中以某种方式记忆了全局变量,并在新页面加载中设置这些变量的默认值。但是,如果我改用全局变量“status”,则始终会看到输出A。
为什么会发生这种情况?
window
对象的name
属性设置为全局作用域时使用的隐式window
命名空间。 - Fabrício Matté