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.
为什么会这样?
看起来name全局上下文中的变量是 chrome 中的某种保留名称。这同样适用于变量,因为status它们只能采用String取值。
该name属性指的是窗口对象的名称,只要窗口处于活动状态,该名称就会持续存在,因此该值在多个文档之间共享。
例如:var status = {}; alert(status)也会发出[Object object]同样的警报name。
我没有任何参考文档来提供这种行为,但我在我的一个项目的错误报告中注意到了一些事情。
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |