使用单引号与不使用引号的函数调用

Function call using single quotes vs no quotes

本文关键字:函数调用 单引号      更新时间:2023-09-26

以下代码段使用函数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/

 setInterval('updateTime()', 1000); 

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

正确方式

setInterval(updateTime, 1000)

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

现在来问为什么。

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

解释它为什么立即执行带括号的updateTime((是因为它试图在区间循环中执行updateTime函数的输出,如果不返回任何内容,则该输出将是未定义的,如果返回字符串,则将被视为函数名。其他任何内容都将被忽略或抛出错误。

希望对有所帮助

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

setInterval(updateTime,1000); 

它应该起作用。原因是^您正在将函数指针传递给setInterval,而在您的回答中updateTime((正在将updateTime的返回值传递给setInterval。