内联事件处理程序内部的神秘变量"URL"

 靖憐兵役_523 发布于 2023-02-05 12:22

在下面的代码中,当您单击此处时,您会在警告对话框中看到什么?


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函数/构造函数.它是一个字符串,它只存在于内联事件处理程序中.

1 个回答
  • 变量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>
    

    2023-02-05 12:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有