SetTimeout,SetInterval传参 发表于 2013-09-15 | 分类于 JavaScript | 方法一:12345678var userName=”jack”;//根据用户名显示欢迎信息function hello(_name){ alert(“hello,”+_name);}//用字符串形式,函数及变量必须为全局作用域window.setTimeout(“hello(userName)”,3000); 方法二:1234567891011121314var userName=”jack”;//根据用户名显示欢迎信息function hello(_name){ alert(“hello,”+_name);}//创建一个函数,用于返回一个无参数函数function _hello(_name){ return function(){ hello(_name); }}//返回值为函数形式,变量名及调用的函数可以是局部作用域window.setTimeout(_hello(userName),3000); 方法三:1234567891011121314151617181920212223var userName=”jack”;//根据用户名显示欢迎信息function hello(_name){ alert(“hello,”+_name);}//*=============================================================//* 功能: 修改 window.setInterval ,使之可以传递参数和对象参数//* 方法: setInterval (回调函数,时间,参数1,,参数n) 参数可为对象(如数组等)//*=============================================================var __sto = setInterval;//更改setTimeout,setInterval方法原型window.setInterval = function(callback,timeout,param){ var args = Array.prototype.slice.call(arguments,2); var _cb = function(){ callback.apply(null,args); } __sto(_cb,timeout); }window.setInterval(hello,3000,userName); 关于“this” 当你向setTimeout()(或者其他函数也行)传递一个函数时,该函数中的this会指向一个错误的值。由于setTimeout()调用的代码运行在与所在函数完全分离的执行环境上,这会导致,这些代码中包含的 this 关键字会指向 window (全局对象)对象,这和所期望的this的值是不一样的。