javascript - js函数调用的一个疑问
天蓬老师
天蓬老师 2017-04-11 10:04:35
[JavaScript讨论组]

这是一个很简单的数字时钟js程序。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>    
        <script>
        function displayTime(){
            var elt=document.getElementById('clock');
            var now=new Date();
            elt.innerHTML=now.toLocaleTimeString();
            setTimeout(displayTime,1000);
        }
        window.onload=displayTime;
        </script> 
    </head>
    <body>        
        <h1>Digital Clock</h1>
        <span id="clock"></span>
    </body>
</html>

我想问的是调用函数的语句:window.onload=displayTime;为什么不能是:window.onload=displayTime();为什么加括号就不对呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
阿神

不加括号是将window.onload指向了displayTime,网页加载完执行函数。
加括号之后就直接执行displayTime函数,将函数的返回结果赋给了window.onload。

大家讲道理

首先,建议用setInterval,而不是循环创建setTimeout。

window.onload 是一个事件,window.onload 事件被触发的时候,会执行其绑定的函数,也就是说什么时候执行并不是我们决定的,而是浏览器决定的,我们只需要绑定函数即可:

window.onload = function() {};
巴扎黑

这个问题其实就是看看你的调用这个函数本身,还是取得函数返回的值,例如

function fun(){
    return 5
}
var a=fun    //表示把函数名fun这个指针拷贝一份给变量a  就是将函数名称fun赋值给a
var b=fun() //如果函数名后面加上圆括号就表示立即调用(执行)这个函数里面的代码(花括号部分的代码)

回到咱们这个问题 :首先window.onload是一个window下的函数调用,我们将displayTime这个函数给onload,其次如果是displayTime()的话,是将displayTime这个函数执行的结果赋值给了window.onload
这样是不合适的。

这是我的理解,应该对你有帮助

伊谢尔伦

你可以这样理解,window.onload 本身也是一个函数(类型),所以你要把一个函数赋值给他,浏览器会自己偷偷地调用 window.onload()。如果你的 displayTime 返回了一个函数,那么也可以用 displayTime()
比如这样:

function displayTime(){
  return function() {
    var elt=document.getElementById('clock')
    var now=new Date()
    elt.innerHTML=now.toLocaleTimeString()
    setTimeout(displayTime,1000)
  }
}
window.onload = displayTime()
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号