Javascript 为什么这是jQuery事件处理程序中的窗口对象?

Javascript 为什么这是jQuery事件处理程序中的窗口对象?,javascript,jquery,arrow-functions,Javascript,Jquery,Arrow Functions,我有一个小的加载脚本来设置一些类,如下所示: function frameIt() { console.log("called frameit") $( 'img' ).on('load', () => { console.log("running listener") debugger; $( this ).addClass( "tasty" ); }); console.log("set listener") } 我的问题是,$(this)始终

我有一个小的加载脚本来设置一些类,如下所示:

function frameIt() {
  console.log("called frameit")
  $( 'img' ).on('load', () => {
    console.log("running listener")
    debugger;
    $( this ).addClass( "tasty" );
  });
  console.log("set listener")
}
我的问题是,
$(this)
始终设置为
窗口
,即使上下文中的
this
是加载的
img
标记,正如Chrome的调试器所示。你知道为什么会这样吗?以下是Chrome调试器屏幕截图:

这是因为箭头函数不绑定它们自己的
这个
上下文——它们接受封闭范围的
这个
值。由于jQuery在内部绑定了事件处理程序的
this
,但
this
不能绑定到箭头函数,
this
引用
窗口,因为它是封闭范围的
this
值。改用常规函数。

但是。。。但是
()=>
是新的
函数吗!!?!显然不是。谢谢你指出这一点。我要等7分钟,直到我能接受答案。欢迎来到堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
$( 'img' ).on('load', function () {
    console.log("running listener")
    debugger;
    $( this ).addClass( "tasty" );
});