大家好,我只是在看carousel.js的代码,我有点困惑,现在我们要附加事件了,我经常看到如下代码:

$('a').click(fuction(e){
    if(e.target.targetNode == $(this)[0])
   //do something
});


我还是有些困惑,谁通过了e?谁真的在功能内部传递了e?

同样在插件代码中,我看到类似以下内容:

Carousel.prototype.keydown = function (e) {
  if (/input|textarea/i.test(e.target.tagName)) return
  switch (e.which) {
    case 37: this.prev(); break
    case 39: this.next(); break
    default: return
  }


附加了一个事件处理程序,如下所示:

  this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))


另一个例子在这里:

  Carousel.prototype.pause = function (e) {
    e || (this.paused = true)

    if (this.$element.find('.next, .prev').length && $.support.transition) {
      this.$element.trigger($.support.transition.end)
    }
    this.interval = clearInterval(this.interval)
    return this
  }


谁在这些函数中传递e,它来自哪里?我完全不知道,我已经使用JS一段时间了,但这仍然让我感到困惑。有人真的可以一劳永逸地消除这个疑问吗?

附言我看到了this这样的答案,但没有回答我所问的问题。我了解e在某种程度上是我们可以访问的具有不同v属性的对象。

最佳答案

您所引用的函数称为回调函数。这些参数从调用它们的函数中传递(在您的情况下是.on()或.click())

为了更好地说明这里的回调函数是如何工作的,

function customFunction ( param1, callbackFunction ) {
    var response = "default response";
    if (param1 === "hello") {
        response = "greeting";
    }
    callbackFunction(response);
}

customFunction("hello", function(e) {
    console.log("this is " + e);
}); // > this is greeting


如您所见,您可以将一个函数作为参数传递给另一个函数。如果这样做,则父函数可以在内部调用此函数,因为在callbackFunction中调用了customFunction
当我们调用customFunction时,我们提供了两个参数(“ hello”字符串和匿名函数),然后按照customFunction中的描述进行处理,并在完成所有其他计算之后调用callbackFunction(在本例中为我们传递的匿名函数)中我们在customFunction中获得的参数。

关于javascript - 了解carousel.js中e的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30437847/

10-10 09:31