如何在 jQuery 事件映射中共享变量?

How can I share a variable amongst a jQuery event map?

给定以下 jQuery .on() 事件映射:

$('header').on({
  mouseenter: function(e) {},
  mouseleave: function(e) {},
}, 'li');

如何在 mouseentermouseleave 事件之间共享一个 var $this = $(this) 变量以使其保持干燥?

编辑:

为了更清楚,如果我想将逻辑应用于事件映射中的每个事件,假设:

mouseenter: function(e) {
  // Grabs the list element.
  var $this = $(this);

  // Gets the sub-menu of the active menu item, if there is one.
  var $subMenu = $this.find('.main-menu__sub-menu').first();

  if ($subMenu.length) {
    // Do something...
  }
},
mouseleave: function(e) {
  // Perform the same checks, and get the same variables as above...
},
click: function(e) {
  // Again, perform the same checks and grab the same variables as above...
}

我显然不想重复我的逻辑,但我需要获取触发事件的 li 元素,这对于事件映射中的所有事件都是相同的...希望这使得更有意义?

不确定为什么需要它,因为 this 变量将引用两个函数中的 header 元素。 但是你可以做到的一种方法是在范围之外声明变量

var $this;

 $('header').on({
  mouseenter: function (e) {
        $this = $(this);
      },
  mouseleave: function (e) {
    $this; // is available
  },
}, 'li');

根据你的扩展描述,你可以做这样的事情:

function getSubmenu(li) {
    // Grabs the list element.
    var $li = $(li);

    // Gets the sub-menu of the active menu item, if there is one.
    var $subMenu = $li.find('.main-menu__sub-menu').first();
    return $subMenu;
}

$('header').on({
    mouseleave: function(e) {
        var $subMenu = getSubmenu(this)
        // do some stuff...
    },
    click: function(e) {
        var $subMenu = getSubmenu(this)
        // do some other stuff...
    }
 }, 'li');