给setTimeout和setIntreval函数添加回调参数
setTimeout和setInterval是两个很常见的计时函数。在以前,他们只接收两个参数,我们无法直接向他们的回调函数中添加参数,如果需要实现添加多个参数,可以在外层多嵌一层来实现类似的功能。现代浏览器对这两个函数支持更多参数,这些参数会在回调函数被调用时原原本本的的传回去。
<script> setTimeout(function(a,b,c){ console.log(a,b,c); },1000,3.14,true,"test"); </script>
低版本IE不支持这个特性,但可以复写这两个函数来实现,虽然要牺牲点性能:
var isIE = navigator.userAgent.match(/MSIE (\d+)/i)[1]; if(isIE < 10) { //计时器方法回调参数兼容 (function() { var i, s = ["setTimeout", "setInterval"]; for(i=0; i < s.length; i++)(function(name) { var func = window[name]; window[name] = function(callback,delay) { //覆写函数 //取出从第三个参数开始的参数 var args = Array.prototype.slice.call(arguments, 2); args.length ? func(function() { callback.apply(null, args); }, delay) : func(callback, delay); }; })(s[i]); })(); }; //测试 setTimeout(function(a, b, c) { alert(a); alert(b); alert(c); }, 1000, 3.14, true, "test");