随笔 - 55  文章 - 0  评论 - 452  阅读 - 60563

使用闭包优雅的为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);

复制代码
这个就是闭包的典型应用了。
posted on   Ray Wu  阅读(2751)  评论(10编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2009年1月 >
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示