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

时间:2014-01-24 19:16:46

标签: javascript

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;。

2 个答案:

答案 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

这似乎是一个非常糟糕的功能,我会避免依赖这种行为。