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

关于javascript中函数的形参是函数调用的情况的几点疑问?
<script language="javascript" type="text/javascript">



function tiao(){
clearInterval(mytime); //释放资源
window.open('manage.html','_self');
}

setTimeout("tiao()",5000); //一次性调用
function changeSec(){
id("myspan").innerText=parseInt(id("myspan").innerText)-1;
}
var mytime=setInterval("changeSec()",1000);

function id(id){

return document.getElementById(id); //循环调用
}
</script>




登陆成功<span id="myspan">5</span>秒后自动跳转管理页面!
以下是问题:  
  var mytime=setInterval("changeSec()",1000); //可以调用成功!
  var mytime=setInterval(changeSec,1000); //也可以调用成功!
  var mytime=setInterval(changeSec(),1000); //不可以调用成功!为什么???


请高手为我解答一下这前两种方式的原理和最后一种方式为什么不可以?????万分感谢!~~


------解决方案--------------------
var mytime=setInterval(changeSec(),1000);
是需要加引号的。。
------解决方案--------------------
var mytime=setInterval(changeSec(),1000); //不可以调用成功!为什么???

没有这种语法
changeSec()是会运行函数的,这里只需要一个注册了的函数,或是js能解释运行的字符串
------解决方案--------------------
setInterval 第一个参数是一个function

如果是 字符串 "" 浏览器会解析成 new Function("");

所以写法是:

function fun(){

}
setInterval (fun,1000); //直接调用fun
setInterval ("fun()",1000); //调用 new Function("fun()")
setInterval (function(){fun();},,1000); //调用匿名函数



setInterval (fun(),1000); 

调用的是fun 的返回值