隐式事件对象在错误事件侦听器中传递

时间:2018-08-07 19:32:40

标签: javascript promise addeventlistener

以这个Javascript Promise为例:

const loadImage = (src) => new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener(`load`,()=>resolve(img));
    img.addEventListener(`error`,(event)=>reject(event));
    img.src=src;
});

有人告诉我

img.addEventListener('error', event => reject(event))

相同
img.addEventListener('error', reject)

是吗?您能解释一下隐式event对象传递机制在Javascript中是如何工作的吗?

2 个答案:

答案 0 :(得分:1)

直接声明回调时:

img.addEventListener('error', event => reject(event));

您正在创建一个带有一个参数的匿名函数,该参数将传递给下一个函数。我们可以将该匿名函数命名为:

const myFunc = argument => reject(argument);
img.addEventListener('error', myFunc);

因此,这只是进一步传递的输入参数的代理。因此,可以将其视为可以减少的额外层,因此我们将只使用reject而不是myFunc来获得相同的结果。

img.addEventListener('error', reject);

答案 1 :(得分:1)

是的,他们在做同一件事,

img.addEventListener('error', event => reject(event))

正在传递addEventListener匿名函数,该函数接收名为event的参数,然后将其传递给reject

img.addEventListener('error', reject)

也在传递给它一个函数,不是匿名的,而是引用的。 reject还会收到一个参数,因此其传递方式与匿名函数一样