答案 0 :(得分:6)
在我看来,当它被指定为HTML“onclick”属性时,浏览器如何为事件处理程序创建函数。我认为它的作用是什么:
<a>
标记),空对象(?),文档对象似乎是该函数中代码的可用符号。也就是说,this[0]
是<a>
元素本身,this[1]
看起来像一个空的Object实例,this[2]
是文档对象。这意味着在代码中编写“onfoo”事件处理程序属性的一部分(并且在直接JavaScript代码绑定的任何普通事件处理程序中不是代码),可以引用属性目标元素(您要为其设置属性的元素)和文档元素的属性,就好像它们存在于作用域链中一样。
如果您稍微更改一下代码:
$('<a href=# onclick="console.log(baseURI);"> ...
然后你得到<a>
元素的“baseURI”属性的值。不需要为明确引用<a>
元素的DOM节点的任何内容添加前缀“baseURI”;它只是“存在”,好像它是在某个封闭范围内用var
声明的。
(现在检查w3c规范......)编辑 - 我没有找到任何规定事件处理程序中脚本代码可用的符号的内容。这真的很奇怪。
再次编辑 - Firefox似乎做了同样的事情,虽然我没有在任何地方看到明确的with
语句。
答案 1 :(得分:1)
with
将它的参数移到范围堆栈的顶部。所以它甚至比全局对象,函数参数等更高。不知道为什么他们使用它。也许这是一个生成的代码。