我在网上找到了以下代码,以便将时钟插入我的网站。在startTime()函数的最后一行中,声明了变量t。但是,t内的代码似乎在不调用t的情况下启动了(这很明显,因为时钟在站点中运行良好)。

为什么此代码有效?

通过将函数分配为变量,我知道这些函数不会在分配时触发,而是需要被调用。我也尝试了下面的代码,而没有将setTimeout分配给t,它也可以工作。将其分配给变量有什么意义?

我是javascript的新手,因此任何可以帮助我了解此处发生情况的解释都很好。

提前致谢!

码:

function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('timeLink').innerHTML = "Time: " +
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
}
function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;

最佳答案

分配变量时,将对右侧求值,并将求值结果放入变量中。

因此,如果您写:

var a = 5 + 6;


然后,解释器将计算5 + 6,得到11的结果,并将a分配给数字11

功能也是如此。如果您写:

function someFunction() {
    return 9;
}
var x = someFunction();


解释器将对someFunction求值,调用该函数,得到9的结果,并将变量分配给9。

这同样适用于您的示例。

var t = setTimeout(startTime, 500);


口译员将:


评估右侧setTimeout(startTime, 500),然后
调用该函数(等待500毫秒,然后调用startTime)
得到的结果是计时器的ID
将该ID分配给t。


但是,实际上您不需要变量t,因为它始终具有null的值,并且从未使用过。在函数的最后,您可以编写setTimeout(startTime, 500);,它会做完全相同的事情。

摘要

实际上,函数确实会在分配时触发,因此可以对它们求值,以返回分配给变量的值。

希望能清除它!

关于javascript - 变量内部的代码会触发而不被调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36375922/

10-12 17:37
查看更多