var __sto = setTimeout;   
   window.setTimeout = function(callback, timeout, param) {      
        var args = Array.prototype.slice.call(arguments, 2);      
        var _cb = function() {                      
                       callback.apply(null, args);                
                  }      __sto(_cb, timeout);   }   
        //测试代码   
        function shihuan(a) {     
            alert(a);   
        }   
        function yushibo(a, b, c) {     
            alert(a + b + c);   
        }   
        var a = new Object();   
        window.setTimeout(shihuan, 1000, a);   
        window.setTimeout(yushibo, 2000, a, 6, 7);运行无结果所示。搜索网上关于定时器的资料,请高手说说里面的逻辑window.setTimeout = function(){……}JavaScript

解决方案 »

  1.   

    这是重载了原来setTimeout方法
    比如 window.setTimeout(yushibo, 2000, a, 6, 7); 
    callback.apply() 相当==> yushibo(a, 6, 7)
      

  2.   

    var __sto = setTimeout;//备份原生函数
    window.setTimeout = function(callback, timeout, param) {//重写原生函数
      var args = Array.prototype.slice.call(arguments, 2);
      //取得除callback和timeout之外的所有参数,也就是传给回调函数的参数  var _cb = function() {//用来调用回调函数,感觉这里有点多余?
        callback.apply(null, args);//调用回调函数,传入参数
      }
      __sto(_cb, timeout);//调用原生setTimeout函数
      

  3.   

    有点像迭代处理器<?php
    function cube($n)
    {
        return($n * $n * $n);
    }$a = array(1, 2, 3, 4, 5);
    $b = array_map("cube", $a);
    print_r($b);
    ?> 
      

  4.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">  
       var __sto = setTimeout;   
       window.setTimeout = function(callback, timeout, param) {      
            var args = Array.prototype.slice.call(arguments, 2);      
            var _cb = function() {                      
             return callback.apply(null, args);                
            }      
    __sto(_cb, timeout);   
    }   
            //测试代码   
            function shihuan(a) {     
                a.tip('f');   
            }   
            function yushibo(a, b, c) {     
                a.tip( b + c);   
            }   
            var a = {};
    a.tip=function(f){
    alert(f);
    }
            window.setTimeout(shihuan, 1000, a);   
            window.setTimeout(yushibo, 2000, a, 6, 7);
    </script>
    </head><body>
    </body>
    </html>