在写js时经常会使用到无参或固定参数方法,比如window.setTimeout(func,300) 比如$("input").click(func)等
如果我们需要定时执行的一个参多个参数方法,应该如果处理呢?
比如有这样一个方法:
function log(a, b){ console.log(a + "_" + b); }
我们需要定时400毫秒后执行
直接用log方法是行不通的:
window.setTimeout(log,100); //错误的
我们首先想到可行的方法:
window.setTimeout(function(){log(1,2)},100);
再来一个复杂点的例子,先看一个槽糕的写法:
for ( var i = 0; i < 20; i++) { window.setTimeout( function () { log(i,i+1); }, 100); }
这样每次出来的结果都是20_21
正确的写法
for ( var i = 0; i < 20; i++) { window.setTimeout( function (a,b) { return function () { log(a,b); }; }(i,i+1), 100); }
如果觉得这样写比较复杂,可以用更通用的方式
可以为Function扩展一个方法,专门用来返回一个无参方法
Function.prototype.curry = function () { var slice = Array.prototype.slice, args = slice.apply(arguments), that = this ; return function () { return that.apply(null , args.concat(slice.apply(arguments))); }; };
上面的方法就可以简化为:
for ( var i = 0; i < 20; i++) { window.setTimeout(log.curry(i,i+1), 100); }
分类:
HTML/JS/CSS
标签:
无参方法 setTimout
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述