[英]How come two different javascript events treat this function differently?
我有以下javascript函数:
onMouseMoved = (function(_this) {
console.log(_this)
return function(event) {
console.log(event)
return;
};
})(this);
mousemove事件触发器
如果添加此侦听器:
document.addEventListener('mousemove', onMouseMoved, false);
触发console.log(event)
但不会触发console.log(_this)
但是,如果我添加此侦听器:
document.addEventListener('mouseenter', onMouseMoved, false);
相反,为什么呢?
您不是在事件处理程序中调用console.log(this)
,而是在立即调用它。 这是立即调用的函数表达式,即IIFE。 它执行并返回分配给onMouseMoved
的函数。
onMouseMoved = (function(_this) {
console.log(_this)
return function(event) {
console.log(event)
return;
};
})(this);
// console.log(_this) has already bee called at this point
// onMouseMoved has been set to the returned function:
//
// function(event) {
// console.log(event)
// return;
// };
document.addEventListener('mousemove', onMouseMoved, false);
document.addEventListener('mousemove', onMouseMoved, false);
该console.log(_this)
仅在首次实例化onMouseMoved
时被调用。
这onMouseMove
被定义为它与值立即调用的函数this
(可能是函数的范围,原因)。 _this
控制台日志不在其事件处理功能内,因此不会在事件上调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.