Javascript 为什么不需要document.getElementById?

Javascript 为什么不需要document.getElementById?,javascript,variables,Javascript,Variables,1)问题1 以下示例不使用“document.getElementById('myId')”即可工作。为什么会这样?跳过“document.getElementById('myId')”可以吗 谢谢 以下示例不使用“document.getElementById('myId')”即可工作。为什么会这样?跳过“document.getElementById('myId')”可以吗 因为浏览器使用id作为变量名,将对具有id的所有元素的引用转储到全局命名空间中。(从技术上讲,作为全局对象上的属性名称

1)问题1

以下示例不使用“document.getElementById('myId')”即可工作。为什么会这样?跳过“document.getElementById('myId')”可以吗

谢谢

以下示例不使用“document.getElementById('myId')”即可工作。为什么会这样?跳过“document.getElementById('myId')”可以吗

因为浏览器使用
id
作为变量名,将对具有
id
的所有元素的引用转储到全局命名空间中。(从技术上讲,作为全局对象上的属性名称;全局对象的属性是全局变量。)我强烈建议不要依赖它,而是使用
document.getElementById
(或类似)。全局名称空间非常拥挤,还有很多其他东西可能会发生冲突

例如,如果你有

<div id="foo">...</div>
<input type="text" id="name">
然后,只需在代码中使用
foo
,就可以得到函数,而不是元素

同样,如果你有

<div id="foo">...</div>
<input type="text" id="name">

…并在代码中使用
name
,您将获得窗口名(字符串),而不是
id=“name”
字段的
HTMLInputElement

中介绍了将对元素的引用转储到全局名称空间的业务,在本例中,它主要记录了浏览器长期以来所做的工作

如果我不将ID存储在变量中,它会是更多的DOM遍历吗?或者它已经是一个变量了吗

根据上面的说明,它已经是一个全局变量,因此没有额外的DOM遍历。在深度嵌套的函数中,可能会有更多的范围链遍历,但这不太可能是一个主要问题


但是,我再次强烈建议不要依赖自动元素globals。相反,将代码包装在一个作用域函数中(如图所示),并根据需要使用
getElementById
querySelector
querySelectorAll
等有目的地获取元素。如果你依赖自动全局,很有可能最终会被冲突所困扰。但这是一种观点


请注意,使用
getElementById
查找元素的速度非常快,因此缓存引用通常不是出于性能原因(您可能出于其他原因,如编码方便)所必需的。使用选择器(
querySelector
querySelectorAll
)查找东西有点慢,但我想说的是,在出现问题时/如果出现问题,请担心它。:-)

JSFIDLE:当一个网页中需要很多这样的元素时,存储所有内容可能不是一个好主意。我有一个关于如何编写ID和函数的特殊模式。就我而言,不会有冲突。此外,我永远不会与其他程序员共享我的代码。如果所有的现代浏览器都支持这项技术,并且他们打算继续这样做,我认为没有理由不尝试。但是,非常感谢你的回答!几周前我偶然发现了这项技术,从那以后我一直在使用它。它适用于所有浏览器,包括移动浏览器。
<input type="text" id="name">