【问题标题】:javascript apply() function, jQuery and the 'this' pointerjavascript apply() 函数、jQuery 和 'this' 指针
【发布时间】:2017-01-31 12:02:31
【问题描述】:

我试图理解这段代码中发生了什么,如果我弄错了,请纠正我

function debounce(func, wait, immediate) {
  var timeout;
  return function () {
    var context = this, args = arguments;
    var later = function () {
      timeout = null;
      if (!immediate) func.apply(context, args);
    };
    var callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(context, args);
  };
}

$(document).on("keyup", "#SearchTerm", debounce(function (e) {
  e.preventDefault();
  var form = $(e.target).closest('form');
  $(form).submit();
}, 300))

首先从 debounce 返回的函数,this 立即执行,并且 this 引用/上下文将是“#SearchTerm”输入元素,因为 jQuery 在其 keyup 事件上附加了函数调用?

其次,在这种情况下,参数对象是否由 jQuery 'keyup' 事件自动填充?

谢谢!

【问题讨论】:

  • 如果你在浏览器控制台中一步步调试代码会更好,因为它会清除你所有的疑虑。
  • 我一直在这样做,我只是想检查一下我的解释是否正确。

标签: javascript jquery this apply


【解决方案1】:

首先从 debounce 返回的函数,this 立即执行,并且 this 引用/上下文将是“#SearchTerm”输入元素,因为 jQuery 在其 keyup 事件上附加了函数调用?

这是正确的。

其次,在这种情况下,参数对象是否由 jQuery 'keyup' 事件自动填充?

arguments 是一个原生的 JS 结构,与 jQuery 没有任何关系。它返回一个类似数组的对象,其中包含传递给函数的所有参数。请参阅MDN 了解更多信息。

【讨论】:

  • 谢谢,我已经阅读了那个链接并且知道它是一个原生的 JS 结构。我假设 jQuery 事件处理程序将此额外信息传递给 debounce 函数,并且在执行时(在 #SearchTerm keyup 的上下文中)使用 arguments 对象来完成传入 func 的“e”参数?所以我们可以做 e.preventDefault() 等
  • 没错 - jQuery 将引发的 event 以及以编程方式发送的任何附加信息传递给处理函数。在你的情况下,你不需要担心这一点。有关它的更多详细信息,请参阅on() 的 API 文档
  • 谢谢罗里,我有一个烦人的习惯,就是试图理解一切!
  • 没什么烦人的:)
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
相关资源
最近更新 更多