JavaScript中调用函数要加上匿名函数function(){}

    今天练习JavaWeb书上一个实例时发现一个问题,原代码如下:

<html>
  <head>
    <title>实时显示系统时间</title>
    <script language="javascript">
    function realSysTime(clock){
    	var now=new Date();			//创建Date对象
    	var hour=now.getHours();	//获取小时
    	var minu=now.getMinutes();	//获取分钟
    	var sec=now.getSeconds();	//获取秒钟
     	var time=hour+":"+minu+":"+sec;	//组合系统时间
    	clock.innerHTML="当前时间:"+time;	//显示系统时间
    }
    window.onload=function(){
		window.setInterval("realSysTime(clock)",1000);	//实时获取并显示系统时间
    }
    </script>
  </head>  
  <body>
    <div id="clock"></div>
  </body>
</html>

   其中关于实时显示系统时间语句,我想去掉window.set Interval(),改为只显示一次时间的语句:window.onload="realSysTime(clock); ",结果却一次时间都不显示.通过问老师和查资料(资料链接:https://zhidao.baidu.com/question/574426156.html?qbl=relate_question_3&word=javascript%20%CA%C2%BC%FE%D3%EB%BA%AF%CA%FD%B9%D8%C1%AA),我知道了应该加上function()匿名函数,改为window.onload=function(){realSysTime(clock); }就可以显示一次时间了(不刷新)。

      我总结了一下原因是:(1)事件只能设置一个函数模板(无参),不能传递参数,如第一种定义function realSysTime(){...},调用window.onload=realSysTime;或者第二种定义function realSysTime(clock){...},调用window.onload=function(){realSysTime(clock);}(2)这里onload属性,需要赋给一个函数类型的值,才可以处理事件。匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。(3)但是realSysTime(clock); 并不是一个函数,你可以说你定义了realSysTime(clock);函数,但realSysTime(clock);也就是加了一对括号的realSysTime,是函数执行了,realSysTime(clock);是等价于realSysTime的返回值的。在realSysTime(clock);函数里,只是给id为clock的节点重新设置了内容,没有返回值,所以默认的就是undefined。虽然realSysTime(clock);不是函数,但realSysTime却是函数,是可以作为节点事件的处理函数的。(4)window.onload=window.setInterval("realSysTime(clock)",1000);实践证明window.setInterval函数是可以作为处理函数的。
所以有两种处理办法:1.window.onload=function(){realSysTime(clock); } 2.window.onload=realSysTime; 

    


猜你喜欢

转载自blog.csdn.net/adnap7/article/details/79621763