gpt4 book ai didi

javascript - 递归函数和 setTimeout 与 setInterval

转载 作者:行者123 更新时间:2023-11-30 12:16:20 26 4
gpt4 key购买 nike

请考虑以下事项:

$(document).ready(function () {
var promise;

(function refresh(){
promise = loadInfo();
promise.done( function() {
$.each(loadedData, function(key, value){
$('#' + key + ' div.info').html(value.label);
})
// Call itself for next iteration
window.setTimeout(refresh, 5 *1000);
})
})()
})
  • 您认为每次迭代都会创建一个新的 var promise 还是它们都重用同一个?
  • 万一每次迭代都创建了一个新的变量,我可以有一个重载超时吗(堆栈溢出!!!);)?应用程序正在显示数据并且应该运行很长时间
  • 我还有另一个带有 setInterval((function refresh(){...}), 5 *1000) 而没有 setTimeout 的版本,哪个更好?想法?

谢谢

最佳答案

由于 promise 变量是在刷新函数之上声明的,它可以通过闭包使用并被重新使用,所以这不会导致堆栈溢出,但是 loadInfo 的实现将决定是否每次都创建一个新变量还是不是。

这可能有助于阐明 JavaScript 和变量范围:How do JavaScript closures work?

也许稍微清理过的版本看起来像这样:

$(document).ready(function () {
(function refresh(){
loadInfo().done( function(loadedData) {
$.each(loadedData, function(key, value){
$('#' + key + ' div.info').html(value.label);
});
// Call itself for next iteration
window.setTimeout(refresh, 5 *1000);
});
})();
});

对于某些人来说,使用 setInterval 可能更具可读性,但我认为您拥有的 setTimeout 方法很好。

关于javascript - 递归函数和 setTimeout 与 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336233/

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