惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
量子位
N
Netflix TechBlog - Medium
The Cloudflare Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
B
Blog
博客园_首页
博客园 - Franky
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
H
Help Net Security
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - Ray Wu

推荐纯真(CZ88.NET)IP库 10亿记录的分区讨论,高手进 测试问卷星问卷公开的问题 asp.net高性能之路:无缝切换HttpRuntime.Cache与Memcached,附代码 非常怪异的服务器网络问题【续】,附排查问题思路 非常怪异的服务器网络问题,请有经验的朋友帮忙看下 测试 也谈谈人人网的不正当竞争 腾讯被打残吧,360去死吧 测试 MBTI职业性格测试 很酷的问卷 自动将脚本放在页面底部 Asp.net页面静态内容自动从不同域名加载--极大提升客户端加载速度 我的网站PR升了没有? QQ邮箱:要把Bug当宝贝到什么时候? 使用异步页面,后台线程提高用户体验和服务器端性能 超轻量级的javascript 评分控件 在线问卷调查平台的创业体会
使用闭包优雅的为setInterval(setTimeout)传递参数
Ray Wu · 2009-01-06 · via 博客园 - Ray Wu

闭包的一个常见用法是在执行函数之前为要执行的函数提供参数。

例如:将函数作为 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);

这个就是闭包的典型应用了。