Javascript 浏览器是否支持对以id命名的html元素的全局引用?

Javascript 浏览器是否支持对以id命名的html元素的全局引用?,javascript,html,css,cross-browser,Javascript,Html,Css,Cross Browser,我无意中在JavaScript中键入了以下代码,它成功了: my_元素。addEventListener(“单击”,函数()){ 警报(“你好世界”); }) #我的元素{ 背景:浅蓝色; 宽度:100px; 高度:100px; 位置:绝对位置; 顶部:50px; 左:50px; } 您好是的,它得到了普遍支持,甚至现在也得到了支持。为具有id(以及许多其他具有names)的元素创建自动全局变量 我从不依赖它,全局名称空间中有太多其他东西。但是是的,这是一种被定义的行为 在下面的一条评论中,

我无意中在JavaScript中键入了以下代码,它成功了:

my_元素。addEventListener(“单击”,函数()){
警报(“你好世界”);
})
#我的元素{
背景:浅蓝色;
宽度:100px;
高度:100px;
位置:绝对位置;
顶部:50px;
左:50px;
}

您好
是的,它得到了普遍支持,甚至现在也得到了支持。为具有
id
(以及许多其他具有
name
s)的元素创建自动全局变量

我从不依赖它,全局名称空间中有太多其他东西。但是是的,这是一种被定义的行为


在下面的一条评论中,你问当发生冲突时会发生什么。更多,但有一个命令。自动DOM全局变量由声明的全局变量以两种不同的方式隐藏。下面是一个例子:

/`example1`是一个DOM自动全局
console.log(示例1的类型);//对象
console.log(此处为“example1”);//真的
console.log(Object.prototype.hasOwnProperty.call(这是“example1”);//假的
//我们有一个ID为'example2'的DOM元素,还有一个
//`var`-声明为全局的;后者优先
var示例2;
console.log(示例2的类型);//未定义
console.log(此处为“example2”);//真的
console.log(Object.prototype.hasOwnProperty.call(这是“example2”);//真的
//我们有一个ID为'example3'的DOM元素,它是一个全局对象属性
//使用该名称,以及一个“let”声明的全局变量;后者获胜
这个例子3=42;
让我们举个例子3;
console.log(示例3的类型);//未定义
console.log(此处为“example3”);//真的
console.log(Object.prototype.hasOwnProperty.call(这是“example3”);//正确
。作为控制台包装器{
最大高度:100%!重要;
}


接下来的问题是,这些自动全局成员是覆盖现有的全局属性,还是在发生命名冲突时失败(无声还是响亮)?@1.21gigawatts-它无声地成功,但并不总是以预期的方式成功。:-)为DOM元素创建的全局变量是全局对象的继承属性(在现代浏览器上),因此,如果在全局范围内使用
var
声明变量(这将创建全局对象的“自己”属性),则该变量优先于自动全局对象。如果在全局范围内声明变量时使用
let
const
,则该变量是在内部全局范围(未连接到全局对象)上创建的,因此它优先于自动全局或全局对象属性。@1.21gigawatts-此处有更多说明:(我还为答案添加了示例。)@1.21千兆瓦-也为此进行了更新。(FWIW,这是“优先”而不是“先例”。)