Javascript 这是HTML对象上的事件处理程序

Javascript 这是HTML对象上的事件处理程序,javascript,this,Javascript,This,我不能完全理解这个简单的例子: <button onclick='clickHandler(this)'>test</button> function clickHandler(el){ var a = this; } 测试 函数clickHandler(el){ var a=此; } 单击按钮时,el映射到HTML事件侦听器。但是,a=thiscalled inside函数为我提供了全局窗口对象。为什么thisinside函数体不是HTML事件监听器(在本例中是

我不能完全理解这个简单的例子:

<button onclick='clickHandler(this)'>test</button>

function clickHandler(el){
var a = this;

}
测试
函数clickHandler(el){
var a=此;
}

单击按钮时,
el
映射到
HTML
事件侦听器。但是,
a=this
called inside函数为我提供了
全局窗口对象。
为什么
this
inside函数体不是HTML事件监听器(在本例中是按钮)。

因为当调用函数而不是对象的属性时,全局
this
(或
未定义的
)是函数中的
此值。如果它是
obj.clickHandler()
,那么
这个
将是
obj
。不过,最好不要使用内联手柄。我已经阅读了您发布的问题,我非常理解这一点的含义。但只有这个例子我不太清楚。函数中的此as属性与函数体中的此属性不同。因为
值从未从其调用者继承(除非调用者明确喜欢
.call
)@CertainPerformance,然后您有EventTarget.addEventListener(“evt”,fn)和
dispatchEvent(evt)
将隐式调用
fn
。。。这里更重要的是将属性值转换为匿名包装函数,该函数将作为处理程序。因此,对
clickHandler
的调用是从全局上下文@CertainPerformance进行的-为什么最好避免使用内联处理程序?