在setTimeout里面传递参数

怎么在setTimeout里面传递参数?
 

 <script>   
  var   _st   =   window.setTimeout;   
  window.setTimeout   =   function(fRef,   mDelay)   {   
  if(typeof   fRef   ==   'function'){   
  var   argu   =   Array.prototype.slice.call(argument,2);   
  var   f   =   (function(){   fRef.apply(null,   argu);   });   
  return   _st(f,   mDelay);   
  }   
  return   _st(fRef,mDelay);   
  }   
    
  function   test(x){   
  alert(x);   
  }   
  window.setTimeout(test,1000,'fason');   
  </script>   

---------------------------------------------------------
嗯想了出来,不用全局变量,当然用局部变量了。   
  

<script>   
  var   _st   =   window.setTimeout;   
  window.setTimeout   =   function(fRef,   mDelay)   {   
  if(typeof   fRef   ==   'function'){   
  for   (var   argu=[],i=2;i<arguments.length;i++)argu[i-2]=arguments[i];   
  var   f   =   function(){   
  if   (!   emu)   var   emu   =   argu;   
  for   (var   i=0,rs=[];i<emu.length;i++)   rs[i]="emu["+i+"]";   
  eval   ("fRef("+rs.join()+")");   
  };   
  return   _st(f,   mDelay);   
  }   
  return   _st(fRef,mDelay);   
  }   
    
  function   test(){   
  for   (var   i=0;i<arguments.length;i++)   
  alert(arguments[i]);   
  }   
  window.setTimeout(test,1000,'fason',window,123,[5,6,7],new   Object());   
  </script>   


----------------------------------------------------
 

 Function.prototype.apply   =   function   (obj,   argu)   {   
  if   (obj)   obj.constructor.prototype._caller   =   this;     
  var   argus   =   new   Array();   
  for   (var   i=0;i<argu.length;i++)   
  argus[i]   =   "argu["   +   i   +   "]";   
  var   r;   
  eval("r   =   "   +   (obj   ?   ("obj._caller("   +   argus.join(",")   +   ");")   :   ("this("   +   argus.join(",")   +   ");")));   
  return   r;   
  };   
  Function.prototype.call   =   function   (obj)   {   
  var   argu   =   new   Array();   
  for   (var   i=1;i<arguments.length;i++)   
  argu[i-1]   =   arguments[i];   
  return   this.apply(obj,   argu);   
  };                 


---------------------------------

微软的一个文档中写的。   
    
  arguments   属性   
  为当前执行的   function   对象返回一个arguments   对象。   
    
  function.arguments   
    
  function   参数是当前执行函数的名称,可以省略。     
    
  说明   
  通过   arguments   属性,函数可以处理可变数量的参数。   arguments   对象的   length   属性包含了传递给函数的参数的数目。对于arguments   对象所包含的单个参数,其访问方法与数组中所包含的参数的访问方法相同。   
    
  示例   
  下面的例子说明了   arguments   属性的用法:   
    

function   ArgTest(){   
        var   i,   s,   numargs   =   arguments.length;   
        s   =   numargs;       
        if   (numargs   <   2)   
              s   +=   "   argument   was   passed   to   ArgTest.   It   was   ";   
        else   
              s   +=   "   arguments   were   passed   to   ArgTest.   They   were   "   ;   
        for   (i   =   0;   i   <   numargs;   i++)   
              {   
                    s   +=   arguments[i]   +   "   ";   
              }   
        return(s);   
  }   


  -------------------------------------------   
  arguments   对象   
  该对象代表正在执行的函数和调用它的函数的参数。   
    
  [function.]arguments[n]   
    
  参数   
  function   
    
  可选项。当前正在执行的   Function   对象的名字。   
    
  n   
    
  必选项。要传递给   Function   对象的从0开始的参数值索引。   
    
  说明   
  不能显式创建   arguments   对象。arguments   对象只有函数开始时才可用。函数的   arguments   对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引   n   实际上是   arguments   对象的   0…n   属性的其中一个参数。   
    
  示例   
  下面的示例演示了   arguments   对象的用法。   
    

 function   ArgTest(a,   b){   
        var   i,   s   =   "The   ArgTest   function   expected   ";   
        var   numargs   =   arguments.length;           //   获取被传递参数的数值。   
        var   expargs   =   ArgTest.length;               //   获取期望参数的数值。   
        if   (expargs   <   2)   
              s   +=   expargs   +   "   argument.   ";   
        else   
              s   +=   expargs   +   "   arguments.   ";   
        if   (numargs   <   2)   
              s   +=   numargs   +   "   was   passed.";   
        else   
              s   +=   numargs   +   "   were   passed.";   
        s   +=   "

"   
        for   (i   =0   ;   i   <   numargs;   i++){             //   获取参数内容。   
        s   +=   "     Arg   "   +   i   +   "   =   "   +   arguments[i]   +   "
";   
        }   
        return(s);                                                     //   返回参数列表。   
  }   


 

原文地址:https://www.cnblogs.com/focus_dada/p/3267792.html