奇怪的IE错误 - 在JavaScript全局变量和具有name属性的元素之间

dda*_*ala 3 javascript internet-explorer

我在IE6,IE7和IE8中测试了以下代码,结果相同:

<a name="cd"/>a</a>
<script>
try {
cd = new Date;
} catch(e) {
alert(e);
}
</script>

在所有情况下都会引发错误.然而使用

var cd = new Date;

似乎解决了这个问题.
有谁知道那是为什么?

这是一个例子:http://jsbin.com/ahuhu4/2

Joe*_*ton 6

如果不使用var说明符来声明变量,则将变量cd作为属性添加到窗口对象中,例如window.cd.您已经有一个对象元素,<a name="cd">a</a>它是已经键入的窗口的子元素.您不能将新Date指定为此对象的类型,因为它已存在.使用var关键字时,您将该变量重新调整为局部范围并删除其对窗口对象的直接附件.这将删除错误并允许IE继续.其他浏览器引擎处理不同.