日期:2014-05-16  浏览次数:20425 次

setTimeout调用问题,请大侠解答,我是初学者
<HTML>
<BODY>
<FORM>
<INPUT TYPE="button" NAME="button" value="test3" onclick="javascript:a2('rrrrrrr')">
</FORM>
<script>

function a2(pram){
  alert(" it is in a2 param1="+pram);
setTimeout(function(){a2('sss1')},3000); //为什么setTimeout后面的第一个参数不能加双引号?
setTimeout("a2('sss2')",5000); //为什么setTimeout后面的第一个参数必须加双引号?
}
</script>
 </BODY>
</HTML>

------解决方案--------------------
setTimeout(function(){a2('sss1')},3000); //传递一个js函数供定时器执行
setTimeout("a2('sss2')",5000); //直接传递js语句供定时器执行; 
setTimeout("a2();alert('123');",5000);//这也是合法的,第二种方式和这个是一个道理

也就是说setTimeOut第一个参数可以有两种类型,传递functiond的话就定时调用函数,传递字符串的话就当作js语句执行,明白了么?
------解决方案--------------------
setTimeout 第一个参数是 function 

如果是 string , 会 创建 new Function() 并调用
相当于:new Function('alert(111)')()


function(){} 是匿名函数,会被直接调用 相当于 
(function(){alert(111)})()
------解决方案--------------------
探讨
setTimeout(function(){a2('sss1')},3000); //传递一个js函数供定时器执行
setTimeout("a2('sss2')",5000); //直接传递js语句供定时器执行;
setTimeout("a2();alert('123');",5000);//这也是合法的,第二种方式和这个是一个道理

也就是说setTimeOut第一个参数可以有两种类型……

------解决方案--------------------
你直接传入"函数名()"就可以调用你写好的函数阿
JScript code

<script>
function a1(pram){
  alert(" it is in a2 param1="+pram);
setTimeout("a3()",5000); 
}
function a3(){
//.....
}



</script>

//如果你要传string参数可以这样:
setTimeout("a2("+ param +")",5000);