首页 > 解决方案 > 将带有 bind() 和参数的函数作为回调传递

问题描述

我正在尝试在事件侦听器概念中获取带有参数的传递函数作为回调。

这是我的代码:

const scrollFunc = scrollY => {

	console.log(`scrolled on ${scrollY}`);

};

window.addEventListener('scroll', scrollFunc.bind(this, pageYOffset));
html,
body {
  min-height: 110vh;
}

我只是不明白为什么它只记录scrolled on 0结果以及如何正确绑定它。

我知道我可以像这样重写这个函数,它会起作用:

const scrollFunc = scrollY => {

    console.log(`scrolled on ${scrollY}`);

};

window.addEventListener('scroll', () => scrollFunc(pageYOffset));

但我仍然真的需要了解如何修复.bind()版本。

标签: javascript

解决方案


myfunc.bind(thisArg, 'hello')将创建一个函数,其词法上下文this绑定到thisArg(在使用箭头函数时无用)并且第一个参数将始终为"hello". 因此,在您的情况下,第一个参数将始终是 is 的pageYOffset0。不要将它作为参数,只需在箭头函数中引用它的值。

window.addEventListener("scroll" , () => console.log(pageYOffset));

会做你想做的。


推荐阅读