gpt4 book ai didi

javascript setTimeout 困惑

转载 作者:行者123 更新时间:2023-12-03 12:26:09 28 4
gpt4 key购买 nike

我是 javascript/coffeescript 新手。

有人可以解释一下为什么这个 CoffeeScript/JavaScript 会毫无延迟地快速通过吗?我对第一种情况的想法是,它是对 updateMap(10) 的调用,会“安排”10 秒后对 updateMaps(9) 的调用,并且会安排一个调用 updateMaps(8) 等等。这两个例子看起来基本相同。我错过了什么?

coffeescript:

updateMap = (numUpdates) ->
console.log("updating, numUpdates = #{numUpdates}")
if numUpdates > 0
$.getScript('/map_markers.js')
setTimeout(updateMap(numUpdates - 1) , 10000)

javascript:

updateMap = function(numUpdates) {
console.log("updating, numUpdates = " + numUpdates);
if (numUpdates > 0) {
$.getScript('/map_markers.js');
return setTimeout(updateMap(numUpdates - 1), 10000);
}
};

但是这个集合可以工作(具有所需的延迟)。

coffeescript:

updateMap = (numUpdates) ->
count = 0
updateMapCallback = ->
count += 1
console.log("updating")
$.getScript('/map_markers.js')
setTimeout updateMapCallback, 10000 unless count < numUpdates


javascript:

updateMap = function(numUpdates) {
var count, updateMapCallback;
count = 0;
return updateMapCallback = function() {
count += 1;
console.log("updating");
$.getScript('/map_markers.js');
if (!(count < numUpdates)) {
return setTimeout(updateMapCallback, 10000);
}
};
};

最佳答案

当你写下:

updateMap = function(numUpdates) {
...
return setTimeout(updateMap(numUpdates - 1), 10000);
};

您正在调用updateMap并将返回值传递给setTimeout以供稍后调用。由于该函数不断调用自身,因此它将尽可能快地依次调用自身,直到 numUpdates - 1 为零(即 numUpdates 次)(或者永远,如果 numUpdates 开始时小于零)。

在大约 10 秒内,setTimeout 将尝试调用返回值(这是一个数字)并抛出错误 numUpdates 次(如果它没有命中某些值)其他限制并同时停止)。

关于javascript setTimeout 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197835/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com