JavaScript是否自动尝试将未定义的变量定义为:
document.getElementById('someUndefVarName')
如下所示,以下内容似乎相同:
<div id="myUndefVar">:)</div>
<script>
alert(myUndefVar); // why does this work!?
alert(document.getElementById('myUndefVar'));
</script>
参见JSFiddle示例:http://jsfiddle.net/AH35k/1/
或者其他事情发生在我不明白的地方?这真的让我措手不及,因为我预计会出现一些错误,因为我正在使用&#34;使用严格的&#34;。
答案 0 :(得分:5)
某些(并且只有某些)浏览器会从ID创建全局变量。
这在调试时非常有用(例如在Chrome控制台中,您可以输入“Blah”来访问带有id="Blah"
的HTML元素),但不应依赖来跨浏览器工作< /强>
此外,如果你这样做:
<div id="myUndefVar">:)</div>
<script>
var myUndefVar;
alert(myUndefVar);
</script>
或者这个:
<div id="myUndefVar">:)</div>
<script>
alert(myUndefVar);
var myUndefVar;
</script>
然后alert
将显示值undefined
。如果在相同的作用域中没有定义其他var并且具有相同的名称(包括提升,如第二个示例中所示),它将仅查找元素的命名ID。
答案 1 :(得分:3)
我相信这个问题的答案总结如下:
浏览器会自动从元素ID
创建全局变量相关问题:javascript variable corresponds to DOM element with the same ID
这似乎是一个非常糟糕的功能,我会避免依赖这种行为。