让window.setTimeout等支持带参数方法
2013-02-19 14:42
603 查看
在写js时经常会使用到无参或固定参数方法,比如window.setTimeout(func,300) 比如$("input").click(func)等
如果我们需要定时执行的一个参多个参数方法,应该如果处理呢?
比如有这样一个方法:
我们需要定时400毫秒后执行
直接用log方法是行不通的:
我们首先想到可行的方法:
再来一个复杂点的例子,先看一个槽糕的写法:
这样每次出来的结果都是20_21
正确的写法
如果觉得这样写比较复杂,可以用更通用的方式
可以为Function扩展一个方法,专门用来返回一个无参方法
上面的方法就可以简化为:
实例代码
如果我们需要定时执行的一个参多个参数方法,应该如果处理呢?
比如有这样一个方法:
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); }
实例代码
相关文章推荐
- 让JavaScript中计时器setTimeout/setInterval的回调方法支持参数传递
- 关于js window.setTimeout()方法
- window.setTimeout,可以传递参数和对象参数
- 修改 window.setTimeout,使之可以传递参数和对象参数
- jQuery setTimeout传递字符串参数报错怎么办?解决方法
- 修改 window.setTimeout,使之可以传递参数和对象参数
- 仅IE不支持setTimeout/setInterval函数的第三个以上参数
- 仅IE不支持setTimeout/setInterval函数的第三个以上参数
- jQuery setTimeout传递字符串参数报错的解决方法
- 在 Javascript 类中使用 setTimeout & 带参数的window.setTimeout(参数可为对象)
- setTimeout/setInterval的使用和参数调用方法
- Window setTimeout()、clearTimeout()方法
- jQuery setTimeout传递字符串参数报错的解决方法
- Linux中很多命令不支持|管道来传递参数解决方法 -- xargs
- js setTimeOut() 方法传参
- 模板内部不支持原生js的方法?》》artTemplate模版方法注册window全部事件方法
- 笔记:解决eclipse中android添加重载函数时参数为arg0,arg1的方法---兼谈Window下载android SDK
- Java语言基础-Java5对数组的支持-方法的可变参数
- [技术]window.open的使用方法以及参数说明