该死的代码
三聪的博客
posts - 25,comments - 92,views - 64691

在写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);
}

 

实例代码

posted on   三聪  阅读(9152)  评论(8编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
< 2013年2月 >
27 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 1 2
3 4 5 6 7 8 9

作者:gateluck
出处:http://gateluck.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
点击右上角即可分享
微信分享提示