使用addEventListener时如何传递event参数?

时间:2017-10-21 04:34:26

标签: javascript function arguments

我对W3schools上的以下代码感到困惑:

document.getElementById("myDIV").addEventListener("transitionend", myFunction);

function myFunction(event) {
  this.innerHTML = "Property name is: " + event.propertyName;
}  

myFunction() 仅在event 中传递而没有任何参数时,myFunction如何传入参数String longest = Arrays.stream(s.split(" +")).sort(comparing(String::length).reversed()).findFirst().get(); String highest = Arrays.stream(s.split(" +")).sort().reduce((a,b) -> b).get();

在正常情况下,这不构成未声明的变量用法吗?

在我应该注意的DOM事件的其他地方是否还有其他类似事件?

1 个答案:

答案 0 :(得分:0)

myFunction只是函数参考。它不会单独调用该函数。传递给addEventListener时,myFunction被称为“某个时间点”。究竟如何调用它是由addEventListener本身决定的,所以调用仍然可以像

myFunction(someEventObject);

该参数由API传递。

其他例子包括:

  • new MutationObserver(function(mutations){ ... }),其中mutations在发生DOM突变时传递给函数,其中包含一系列突变。
  • new Promise(function(resolve, reject){ ... })其中resolvereject作为两个函数提供,只要异步操作被“解决”或“拒绝”就会被调用。
  • [1, 2, 4].map(function(item, index, array){ ... })其中item124位于index 0,分别为12,而array是正在迭代的数组。

还有更多。

你可以自己制作这样的功能。

考虑这个示例,其中函数action在两秒后执行,因为它被传递到另一个名为executeTwoSecondsLater的函数中。

假设,当time最终在函数本身内执行时,我们需要action



// Provided by the API:

function executeTwoSecondsLater(callback) {
  setTimeout(function() {
    callback(new Date().toString());
  }, 2000);
}

// Written by the user:

function action(time) {
  console.log(`The time of execution is ${time}.`);
}

executeTwoSecondsLater(action);




timeexecuteTwoSecondsLater提供。