了解箭头功能-为什么这行不通呢?

时间:2019-11-23 19:55:57

标签: javascript jquery arrow-functions

我正在尝试将所有较旧的代码转换为使用箭头功能...

以下作品:

$p_worklist.mouseover (()=> {
   closemenues();
   console.log ("Show Worklist");
 $div_worklistmenu.show();
});

但这不是

$p_worklist.mouseover =()=> {
   closemenues();
   console.log ("Show Worklist");
 $div_worklistmenu.show();
};

不同之处在于,第一个函数将主体包裹在括号中,而第二个函数不但将第一个括号替换为等号并消除第二个函数。

尝试学习... 谢谢

4 个答案:

答案 0 :(得分:3)

第一个是调用 $p_worklist.mouseover,并传入一个函数。然后,jQuery将执行设置事件侦听器所需的任何内部代码,并且当发生鼠标悬停时,它将调用您提供给它的函数。

第二个是分配$p_worklist.mouseover,从而用您创建的功能覆盖过去的内容。没有运行其他代码,也没有设置事件侦听器。

jQuery的api希望您调用它,因此方法1是正确的选择。

答案 1 :(得分:2)

在第一个示例中,您调用mouseover方法,在下一个示例中,您只是覆盖了该方法而没有调用

答案 2 :(得分:1)

问题不在于箭头功能,而是您使用mouseover属性来设置事件侦听器。

在JQuery中(假设您使用的是$,我假设您正在使用),mouseover是一个函数,它需要另一个函数作为参数。因此,您将完全像您一样传递匿名箭头功能。

但是,在普通JavaScript中,mouseover属性是指向要作为事件侦听器调用的函数的指针。

如果您使用的是JQ:

$('selector').mouseover(() => {
  // ...
});

如果您使用的是JS:

element.mouseover = event => {
  // ...
}

当然,您可以使用setter来覆盖JQuery方法,但这可能不是您想要的。

答案 3 :(得分:1)

mouseover()是jQuery方法。像所有jQuery事件处理方法一样,它以handler函数作为参数,因此您必须调用该方法。

当您分配给$p_worklist.mouseover时,您将使用新函数替换该方法,而不是调用该方法。这不是在jQuery中绑定事件处理程序的方式。

您将jQuery方法调用与DOM onXXX属性混淆,在其中编写了类似

element.onmouseover = ()=> {
    closemenues();
    console.log ("Show Worklist");
    $div_worklistmenu.show();
};