有谁可以请解释这个JavaScript代码中发生了什么?

Cur*_*arn 0 javascript

我希望浏览器显示自上次刷新以来的秒数.我不明白为什么Code 1不起作用; 守则2; 如果代码1不起作用,为什么代码3有效?该setInterval呼叫是在码1和码3的方式类似定义的函数是不同的.但我不清楚为什么会有所作为.

非常感谢您的帮助.我刚开始学习JavaScript.

代码1

<html>
<head>
    <title>Time Since Refresh</title>
</head>
<body>
<br/>
<br/>
<span id="timeSinceStart"></span>

<script language="JavaScript">
    var timeRefreshed = new Date();
    function displayTimeSinceStart(){
        var now = new Date();
        //compute elapsed time
        var elapsed = Math.round((now - timeRefreshed)/1000);
        document.getElementById("timeSinceStart").innerHTML = "Time Elapsed: " + elapsed + " seconds."; 
    }

    // Update seconds counter
    setInterval(displayTimeSinceStart(), 1000);

</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

代码2 与CODE 1相同,但setInterval()函数写为

setInterval("displayTimeSinceStart();", 1000);
Run Code Online (Sandbox Code Playgroud)

代码3

<html>
<head>
    <title>Time Since Refresh</title>
</head>
<body>
<br/>
<br/>
<span id="timeSinceStart"></span>

<script language="JavaScript">
    var timeRefreshed = new Date();
    var timeSinceStart = {
        displayTimeSinceStart: function(){
            var now = new Date();
            //compute elapsed time
            var elapsed = Math.round((now - timeRefreshed)/1000);
            document.getElementById("timeSinceStart").innerHTML = "Time Elapsed: " + elapsed + " seconds."; 
        }
    }

    // Update seconds counter
    setInterval(timeSinceStart.displayTimeSinceStart, 1000);

</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 7

代码1 调用 displayTimeSinceStart(因为"()")而不是传递对它的引用:setInterval获取该函数的返回值(undefined).删除括号以修复.

代码2传递一个字符串以setInterval进行评估:由于您希望在间隔超时时调用该方法,因此需要填充.

代码3传递一个参考,相当于代码1没有"()",所以它的工作原理.

setInterval 期望函数引用(首选)或要评估的字符串.

更多细节(包括为什么有时将方法调用作为参数setTimeout才有意义).