使用单引号和无引号的函数调用

时间:2016-07-03 05:04:00

标签: javascript html

以下代码使用函数setInterval()来不断更新“时钟”。唯一的区别在于函数调用setInterval()。

当我从

更改setInterval参数时
setInterval('updateTime()',1000); 

setInterval(updateTime(),1000); 

[从单引号到无引号],它不起作用。任何人都可以向我解释这个吗?

单引号:

<head>
    <script>
        function updateTime(){
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            var now= h+':'+m+':'+s;
            document.getElementById('timer').innerHTML = h+':'+m+':'+s;//set the text in 'timer' id below to the date
            setInterval('updateTime()', 1000); //////SEE THIS LINE//////
        }
    </script>
</head>
<body>
    <p id='timer'> Time </p>
    <script>
        updateTime();
    </script>
</body>

没有引言:

<head>
    <script>
        function updateTime(){
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            var now= h+':'+m+':'+s;
            document.getElementById('timer').innerHTML = h+':'+m+':'+s;//set the text in 'timer' id below to the date
            setInterval(updateTime(), 1000);//////SEE THIS LINE//////
        }
    </script>
</head>
<body>
    <p id='timer'> Time </p>
    <script>
        updateTime();
    </script>
</body>

可以在此处找到用于测试的在线js控制台:https://jsfiddle.net/

3 个答案:

答案 0 :(得分:6)

 setInterval('updateTime()', 1000); 

您将字符串作为第一个参数传递给setInterval。您需要传递函数引用

正确的方式

setInterval(updateTime, 1000)

答案 1 :(得分:1)

尝试这样做 setInterval(updateTime, 1000); 没有()

现在提出问题的原因。

Setinterval函数评估内容如果字符串执行,如果函数名称

要解释为什么执行 updateTime(),括号立即是因为它尝试执行输出区间循环中的updateTime函数,如果您没有返回任何内容,则将是未定义的,如果返回字符串将被视为函数名称。其他任何事情都会被忽视或抛出错误。

希望有所帮助

答案 2 :(得分:0)

如果您将第二个代码更改为

setInterval(updateTime,1000); 

它应该有用。原因是因为^你在你的答案中传递一个函数指针设置间隔,updateTime()将updateTime的返回值传递给setInterval。