JavaScript节流函数中如何正确传递参数?

javascript节流函数中如何正确传递参数?

原生JavaScript节流函数参数传递的正确方法

在使用原生JavaScript实现节流函数时,直接使用apply方法传递参数可能会导致函数提前执行,并非预期的节流效果。 以下分析并解决这个问题:

错误示例:

function sayHi(data) {  console.log(data + new Date().getSeconds());}function throttle(func, delay) {  let timer = null;  return function() {    const context = this;    const args = arguments;    if (!timer) {      timer = setTimeout(() => {        func.apply(context, args); // 问题在此行        timer = null;      }, delay);    }  };}window.addEventListener('resize', throttle(sayHi('abc'), 2000)); // sayHi立即执行

上述代码中,throttle(sayHi('abc'), 2000) 会立即执行 sayHi('abc')throttle 函数接收到的 func 实际上是 sayHi('abc') 的返回值 (undefined),导致节流失效。

立即学习“Java免费学习笔记(深入)”;

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版 动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版 508 查看详情 动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

正确方法:

为了避免函数提前执行,我们需要创建一个闭包,将参数传递给节流函数内部的匿名函数:

function sayHi(data) {  console.log(data + new Date().getSeconds());}function throttle(func, delay) {  let timer = null;  return function(...args) { // 使用rest参数接收参数    const context = this;    if (!timer) {      timer = setTimeout(() => {        func.apply(context, args);        timer = null;      }, delay);    }  };}window.addEventListener('resize', throttle(sayHi, 2000)); // 正确的调用方式window.dispatchEvent(new Event('resize')); //触发resize事件测试//传递参数的方式window.addEventListener('resize', throttle(function(){sayHi('abc')},2000));

在这个改进后的版本中:

我们使用 ...args (rest参数) 来接收传递给节流函数的所有参数。sayHi 函数本身作为参数传递给 throttle 函数,而不是立即执行它。在 setTimeout 回调函数中,func.apply(context, args) 正确地将参数应用于 sayHi 函数。

现在,sayHi 函数只会在 setTimeout 延迟后执行,实现了正确的节流功能。 第二个window.addEventListener例子展示了如何传递参数给sayHi函数。 记住要触发一个resize事件来测试节流效果。

以上就是JavaScript节流函数中如何正确传递参数?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1136006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang Visitor结构遍历访问者模式示例
上一篇 2025年12月2日 17:27:32
数据库主键 ID 生成策略
下一篇 2025年12月2日 17:27:42

相关推荐

  • MySQL性能监控工具推荐与使用教程_全面掌控数据库运行状态

    MySQL性能监控工具推荐与使用教程_全面掌控数据库运行状态MySQL性能监控工具推荐与使用教程_全面掌控数据库运行状态MySQL性能监控工具推荐与使用教程_全面掌控数据库运行状态MySQL性能监控工具推荐与使用教程_全面掌控数据库运行状态

    mysql性能监控工具是用于实时掌握数据库运行状态、定位瓶颈并进行优化的关键手段。首先,mysql自带的show status、performance_schema等提供基础信息;其次,percona toolkit中的pt-query-digest可高效分析慢查询日志;再次,prometheus+…

    2026年9月2日 用户投稿
    000
  • mysql怎样in查询操作排序

    在mysql中,可利用“ORDER BY”子句配合SELECT语句in查询来操作排序,语法为“select*from 表名 where 字段值 in(排序1,排序2…) order by field(字段值,排序1,排序2…);”。 本教程操作环境:windows10系统、m…

    2026年9月2日
    200
  • PHP按最后修改时间排序图片:从入门到实践

    本文旨在帮助PHP初学者掌握如何按最后修改时间对图片进行排序。通过使用glob函数获取图片文件,再利用usort函数结合filemtime函数实现排序,最终展示排序后的图片列表。本文将提供详细的代码示例和解释,帮助读者理解并应用该技术。 在Web开发中,经常需要展示图片列表,并且按照一定的顺序排列,…

    2026年9月2日
    000
  • mysql怎样判断数据是否存在

    在mysql中,可以利用count()函数判断数据是否存在,该函数的作用就是用来统计表中记录数据,语法为“select COUNT(字段值) as 字段名 from 表名 where 字段条件;”,返回结果为0数据不存在,结果大于0则存在。 本教程操作环境:windows10系统、mysql8.0.…

    2026年9月2日
    000
  • mysql怎样实现分页

    方法:1、利用limit实现分页,语法为“SELECT*FROM 表名 limit 开始记录数,每页条数”;2、利用主键索引实现分页,语法为“SELECT*FROM 表名 WHERE 字段名 > (页数*10) LIMIT 条数”。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年9月2日
    100
  • Java中如何创建一个小型学习笔记管理工具

    答案:Java学习笔记管理工具包含Note类和NoteManager类,通过Main类实现添加、查看、搜索笔记功能,支持用户交互。 用Java创建一个小型学习笔记管理工具,关键在于结构清晰、功能实用。核心功能包括添加笔记、查看笔记、搜索笔记和保存数据。下面是一个简单但完整的实现思路和代码示例。 1.…

    2026年9月2日
    000
  • mysql怎样查询端口

    mysql怎样查询端口mysql怎样查询端口mysql怎样查询端口mysql怎样查询端口

    在mysql中,可以利用show命令查看端口,该命令的作用就是查看MySQL的一些参数、数据库、表、列、索引等信息,语法为“show global variables like ‘port’”。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G…

    2026年9月2日 用户投稿
    100
  • 如何在Java中开发小型库存系统

    答案:通过Java面向对象设计实现小型库存系统,包含商品类Item和库存管理类InventoryManager,使用HashMap存储商品信息,支持增删改查、入库出库操作,并提供命令行界面进行交互,适合学习基础语法与集合应用。 开发一个小型库存系统在Java中可以通过面向对象的设计思路来实现,重点是…

    2026年9月2日
    000
  • kimichat官网入口地址列表-kimichat官方网站网址指南

    kimi官网入口地址是https://kimi.moonshot.cn/,支持长文本处理、联网搜索、文件解析和多轮对话,提供网页端与APP双平台,适用于学习、创作、代码等多场景,操作便捷且响应迅速。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜…

    2026年9月2日
    000
  • mysql怎么删除root用户

    mysql删除root用户的方法:1、使用“CREATE USER”语句创建一个与root用户权限一样的用户;2、使用“drop user”语句删除root用户,语法“DROP USER root用户账号”。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 删除MySQ…

    2026年9月2日
    100
  • MySQL字段下划线映射问题:如何优雅地解决数据库字段与Java对象属性的命名差异?

    巧妙应对MySQL字段下划线命名差异 在使用MySQL数据库时,经常会遇到数据库字段名与Java对象属性名命名风格不一致的问题(例如,数据库字段名用下划线分隔,而Java属性名采用驼峰命名法)。除了@TableField注解,还有其他几种优雅的解决方案: 1. ORM框架的命名策略 许多ORM框架(…

    2026年9月2日
    000
  • 怎么提高mysql的查询速度

    提高mysql查询速度的方法:1、选取最适用的字段属性;2、使用连接(JOIN)来代替子查询;3、使用联合(UNION)来代替手动创建的临时表;4、添加索引;5、对查询进行优化,尽量避免全表扫描;6、尽量使用表变量来代替临时表等等。 本教程操作环境:windows7系统、mysql8版本、Dell …

    2026年9月2日
    900
  • mysql中怎么调用存储过程

    在mysql中,可以使用CALL语句来调用存储过程,该语句接收存储过程的名字以及需要传递给它的任意参数,语法为“CALL sp_name([parameter[…]]);”。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 调用存储过程 MySQL 中使用 …

    2026年9月2日
    000
  • mysql存储过程中怎么定义变量

    在mysql存储过程中,可以使用DECLARE关键字来定义变量,语法为“DECLARE 变量名称[,…] type [DEFAULT 默认值]”;参数“type”用来指定变量的类型,“DEFAULT”子句用于为变量设置默认值。 本教程操作环境:windows7系统、mysql8版本、De…

    2026年9月2日
    200
  • Microsoft Teams如何使用移动端 Microsoft Teams外出办公的适配指南

    首先下载安装Microsoft Teams移动端,登录后通过底部导航使用聊天、团队、日历等功能;外出时可加入会议、共享屏幕、协作编辑文档,并设置个人状态与工作位置,提升远程办公效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Micro…

    2026年9月2日
    200
  • mysql存储过程的参数类型有哪些

    mysql存储过程的参数类型有三种:1、输入参数,用“IN”关键字标识,可以传递给一个存储过程;2、输出参数,用“OUT”关键字标识,用于存储过程需要返回一个操作结果的情形;3、输入输出参数,用“INOUT”关键字标识。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 …

    2026年9月2日
    600
  • 在VS Code中正确配置Docker容器PHP环境

    本文旨在解决在使用VS Code进行Docker化PHP项目开发时,IDE无法识别容器内PHP版本,反而使用本地PHP版本的问题。核心解决方案是利用VS Code的Remote Containers扩展,实现直接在Docker容器内部进行开发,从而确保VS Code的PHP工具链与容器环境保持一致,…

    2026年9月1日
    100
  • 一起聊聊MySQL基础之连接查询

    本篇文章给大家带来了关于mysql中连接查询的相关知识,其中包括内连接、外连接、多表连接以及子查询的相关问题,希望对大家有帮助。 再次认识关系表 我们之前一直使用student_info和student_score两个表来分别存储学生的基本信息和学生的成绩信息,其实合并成一张表也不是不可以,假设将两…

    2026年9月1日
    100
  • 必须要了解MySQL索引的坑

    必须要了解MySQL索引的坑必须要了解MySQL索引的坑必须要了解MySQL索引的坑必须要了解MySQL索引的坑

    本篇文章给大家带来了关于mysql中关于索引可能会遇到的问题,索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,希望对大家有帮助。 索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所…

    2026年9月1日 用户投稿
    200
  • 详解MySql Group by函数真正的打开方法!

    本篇文章给大家介绍mysql group by 函数的正确打开方式,希望对大家有帮助! MySql Group by 函数的正确打开方式 在使用分组函数时, 进行结果集筛选, 遇到的一些问题以及解决办法【推荐:mysql视频教程】 1. 应用场景 有两张表 文章表(一对多留言表) t_posts: …

    用户投稿 2026年9月1日
    100

发表回复

登录后才能评论
关注微信