在下面的代码中,当您单击此处时,您会在警告对话框中看到什么?
click here
小提琴
我很确定答案是"你好",我甚至不在乎尝试.
但我实际看到的是当前页面的网址(在Chrome,Firefox和IE9上测试过).
为什么URL
在内联事件处理程序中定义了这个变量?
为什么它优先于我自己的变量?
我在哪里可以找到有关此行为的文档?
跟进
这是否只发生在内联事件处理程序中?
这样的动机是什么动机?
后续行动2
我在旧浏览器上做了更多测试,这种行为似乎是远古时代的痕迹.我在以下浏览器上验证了它:
Mozilla 1.0.1
Firefox 2.0.0.6
IExplorer 6.0
Nestscape 8.1.2
Opera 9.02
这意味着这个URL变量肯定不是实验window.URL
函数/构造函数.它是一个字符串,它只存在于内联事件处理程序中.
变量window.URL
(即全局变量URL
)是特殊的.(将脚本更改为使用其他名称,例如url
,它将按照您最初的预期运行.)有关文档URL
可以在此处找到.请注意,不支持的浏览器不会URL
以此意外方式运行.
好吧,上面说的不太对.这里有两个URL
变量.当脚本运行时,它会覆盖(或创建)window.URL
,然后写入文档.(请注意,您的代码会消失window.URL
,因此一旦您的脚本运行,您就不再能够var n = new URL(...);
在支持该技术的浏览器中执行此操作.)
另一方面,当<div>
创建时,onclick
处理程序属性值将转换为函数:
function() { alert(URL); }
解释行为的重要一点是,从字符串到函数的转换是在上下文中执行的document
.因此URL
在这个功能中指的是document.URL
.(此处document.URL
描述了该属性.)您可以通过执行以下操作来验证这一点:
<script> URL = 'hello' ; document.write(URL); </script> <div onclick="alert(URL === document.URL)">click here</div>