Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

setTimeout和setIntreval的回调参数

  setTimeout和setIntreval是很常用的两个计时器方法。在以前,它们只有两个参数,我们无法对他的回调函数直接传入参数,如果需要实现类似的功能需要多嵌一层函数。现代浏览器对这两个函数支持更多参数,这些参数会被在调用回调函数时原原本本地传递回去。
<script>
setTimeout(function(a,b,c){
  console.log(a,b,c);
},1000,3.14,true,"test");
</script>

  低版本IE不支持这个特性,但实现这些并不难,可以覆写这两个方法来实现,虽然要牺牲点性能。
<script>
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(func,delay);
      };
    })(s[i]);
  })();
};
//测试
setTimeout(function(a,b,c){
  console.log(a);
  console.log(b);
  console.log(c);
},1000,3.14,true,"test");
</script>
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^