我正在玩javascript,我不明白这个小片段是如何工作的:
html&gt; <div id="foo_bar"></div>
javascript&gt; foo_bar.textContent = "Hello, world!";
结果&gt; <div id="foo_bar">Hello, world!</div>
foo_bar不是之前在代码中定义的变量。我的javascript代码中只有这一行 查看jsFiddle演示:http://jsfiddle.net/6W25e/
那真的发生了什么? 我一直认为没有像element.getElementById()这样的dom方法就无法访问dom元素。 有关于此行为的任何文档吗? (我的搜索在mdn上没有成功)
答案 0 :(得分:0)
取自 bobInce
应该发生的是“命名元素”被添加为文档对象的明显属性。这是一个非常糟糕的主意,因为它允许元素名称与文档的真实属性冲突。
IE通过添加命名元素作为窗口对象的属性使情况变得更糟。这是非常糟糕的,因为现在您必须避免在您(或项目中的任何其他库代码)可能想要使用的文档或窗口对象的任何成员之后命名您的元素。
了解详情:Do DOM tree elements with ids become global variables?
这意味着这样做是非常糟糕的做法,有些浏览器不支持它,不适合这种做法的优秀做法。
会发生的情况是,某些浏览器会将全局变量作为窗口类,使窗口加载时可以立即访问它们。