给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");

 

posted @ 2014-03-07 10:46  breezefeng  阅读(1144)  评论(0编辑  收藏  举报