怎么在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); // 返回参数列表。 }