[英]Pass a function with bind() and parameters as a callback
我试图在事件侦听器概念中获得一个带有参数的传递函数作为回调。
这是我的代码:
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()
版本。
myfunc.bind(thisArg, 'hello')
将创建一个函数,其词法上下文this
绑定到thisArg
(在使用箭头函数时这是无用的)并且第一个参数将始终是"hello"
。 因此,在您的情况下,第一个参数将始终是pageYOffset
的值,即0
。 与其将它作为参数,不如在箭头函数中引用它的值。
window.addEventListener("scroll" , () => console.log(pageYOffset));
会做你想做的。
您的两个代码版本之间的主要区别在于pageYoffset
的值将被拾取以用于实际调用scrollFunc
。 在带有.bind
的版本中,该值在您执行addEventListener
确定。 在另一个版本中,该值仅在滚动事件触发时确定。
你不能真正修复.bind
版本,而不放弃.bind
本身(你已经成功做到了),因为显然pageYoffset
在你执行.bind()
pageYoffset
没有合适的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.