JavaScript未定义的变量是自动定义的?

mik*_*ail 2 javascript

JavaScript是否自动尝试将未定义的变量定义为:

document.getElementById('someUndefVarName')
Run Code Online (Sandbox Code Playgroud)

如下所示,以下似乎是等效的:

<div id="myUndefVar">:)</div>
<script>
    alert(myUndefVar); // why does this work!?
    alert(document.getElementById('myUndefVar'));
</script>
Run Code Online (Sandbox Code Playgroud)

参见JSFiddle示例:http://jsfiddle.net/AH35k/1/

或者是其他发生的事情,我不明白?这真的让我措手不及,因为我正在使用"use strict",因此我预计会出现一些错误.

Sim*_*ris 5

一些(并且只有一些)浏览器从ID创建全局变量.

这在调试时很有用(例如在chrome控制台中你可以输入"Blah"来访问HTML元素id="Blah"),但不应该依赖于跨浏览器工作.

此外,如果你这样做:

<div id="myUndefVar">:)</div>
<script>
    var myUndefVar;
    alert(myUndefVar);
</script>
Run Code Online (Sandbox Code Playgroud)

或这个:

<div id="myUndefVar">:)</div>
<script>
    alert(myUndefVar);
    var myUndefVar;
</script>
Run Code Online (Sandbox Code Playgroud)

然后alert将显示该值undefined.如果在同一作用域中没有定义其他var且名称相同(包括提升,如第二个示例中所示),它将仅查找元素的命名ID.