javascript - 将带有 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()
版本。
解决方案
myfunc.bind(thisArg, 'hello')
将创建一个函数,其词法上下文this
绑定到thisArg
(在使用箭头函数时无用)并且第一个参数将始终为"hello"
. 因此,在您的情况下,第一个参数将始终是 is 的pageYOffset
值0
。不要将它作为参数,只需在箭头函数中引用它的值。
window.addEventListener("scroll" , () => console.log(pageYOffset));
会做你想做的。
推荐阅读
- winapi - Cloud Filter API:如何让不知道云的应用程序删除文件,但实际上只是让它们脱水?
- mysql - 无法设置唯一键以避免插入重复的行?
- scala - Spark(scala)Maven项目给出类未找到错误
- javascript - 原始顺序(性能版)代码战中的 N 个最小元素
- css - Bootstrap 4 截断文本显示至少两行
- python - 如何让我的输出从列中获取特定值,然后显示整行?
- python - 组合两个字典并用 Python 中的值替换键
- javascript - 未检测到 OWASP ESAPI XSS 攻击
- django - 当我使用样板时,Django 模型不渲染
- amazon-web-services - AWS Glue ETL - 将 Epoch 转换为时间戳