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

本文探讨了JavaScript中定时显示系统时间的实现方式,并对比了使用setInterval与onload事件的不同效果。作者通过实操解决了仅显示一次时间的问题,揭示了事件处理函数及匿名函数的正确用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天练习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; 

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值