无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数。
先看一个简单的代码:
function Hello(){
alert("Hello World");
}
setTimeout(Hello,1000);
这段代码的效果是在1秒后显示Hello World,但是如果改成setTimeOut(Hello(),1000);就会立即显示,达不到延时的效果了。但是如果加上引号就可以了。如:setTimeOut("Hello()",1000);
先看一个简单的代码:
function Hello(){
alert("Hello World");
}
setTimeout(Hello,1000);
这段代码的效果是在1秒后显示Hello World,但是如果改成setTimeOut(Hello(),1000);就会立即显示,达不到延时的效果了。但是如果加上引号就可以了。如:setTimeOut("Hello()",1000);
但是如果带上参数的话,还是不行。
比如:setTimeOut("show(name)",1000)
我们可以再写个函数,该函数返回一个不带参数的函数,具体如下:
<script language="javascript">
function Hello(name){
alert("Hello World:" + name);
}
function _Hello(name){
return function(){
Hello(name);
}
}
setTimeout(_Hello(name),1000);
</script>
这里定义了一个函数_Hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_Hello(name)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。
setTimeout有两种形式:
setTimeout(code,interval)
setTimeout(func,interval,args)
我们也可以这样传参数:setTimeout(Hello,1000,name);