SetTimeout,SetInterval传参

方法一:

1
2
3
4
5
6
7
8
var userName=”jack”;
//根据用户名显示欢迎信息
function hello(_name){
alert(“hello,”+_name);
}

//用字符串形式,函数及变量必须为全局作用域
window.setTimeout(“hello(userName)”,3000);

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var userName=”jack”;
//根据用户名显示欢迎信息
function hello(_name){
alert(“hello,”+_name);
}
//创建一个函数,用于返回一个无参数函数
function _hello(_name){
return function(){
hello(_name);
}
}

//返回值为函数形式,变量名及调用的函数可以是局部作用域
window.setTimeout(_hello(userName),3000);

方法三:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var 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的值是不一样的。