使用闭包优雅的为setInterval(setTimeout)传递参数
闭包的一个常见用法是在执行函数之前为要执行的函数提供参数。
例如:将函数作为 setInterval
函数的第一个参数,这在 Web 浏览器的环境下是非常常见的一种应用。
setInterval
用于有计划地执行一个函数,要执行的函数是其第一个参数,其第二个参数是以毫秒表示的执行间隔。也就是说,当在一段代码中使用 setInterval
时,要将一个函数的引用作为它的第一个参数,而将以毫秒表示的时间值作为第二个参数。但是,传递函数引用的同时无法为计划执行的函数提供参数。
然而,可以在代码中调用另外一个函数,由它返回一个对内部函数的引用,再把这个对内部函数对象的引用传递给 setInterval
函数。执行这个内部函数时要使用的参数在调用返回它的外部函数时传递。这样,setInterval
在执行这个内部函数时,不用传递参数,但该内部函数仍然能够访问在调用返回它的外部函数时传递的参数:
function doSomething(paramA, paramB, paramC){
/* 返回一个由函数表达式创建的匿名内部函数的引用:- */
return (function(){
/* 这个内部函数将通过 - setInterval- 执行,而且当它执行时它会读取并按照传递给外部函数的参数行事: */
paramA[paramB] = paramC;
});
}
/* 调用这个函数将返回一个在其执行环境中创建的内部函数对象的引用。传递的参数最终将作为外部函数的参数被内部函数使用。返回的对内部函数的引用被赋给一个全局变量:-*/
var functRef = doSomething(menu, "display", "none");
/* 调用 setInterval函数,将赋给变量 - functRef - 的内部函数的引用作为传递的第一个参数:- */
setInterval(functRef, 500);这个就是闭包的典型应用了。
分类:
客户端编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架