gpt4 book ai didi

javascript - 为什么这个带有对象调用函数的 Javascript setInterval 在传入回调时不评估内部参数?

转载 作者:行者123 更新时间:2023-11-30 05:56:36 27 4
gpt4 key购买 nike

以下脚本输出 1 2 3 4 5 6 7.. 我假设它会输出 0 1 2 3 4 5 ...

事实上,在我的实际代码中,我相信 print(lostCnt) 总是连接到最新的(像全局一样)最后一次计数更新。为什么是这样?我可以做些什么来让它保留实际的 cnt,但不能修改 obj1 中的任何代码。

<!DOCTYPE html>

<html>
<head>
<script type="text/javascript">
function obj1(parameter, callback){
setTimeout(callback, parameter);
}
function caller(){
function miscFunction(cnt){
document.getElementById("main").appendChild(document.createTextNode(cnt));
}
var lostCnt = 0;
setInterval(
function(){
new obj1(5,
function(){
miscFunction(lostCnt);
});
lostCnt++;
},5000
);
}
</script>


</head>
<body onload="caller();">
<div id="main">
</div>
</body>

</html>

谢谢,这是我的第一篇文章

最佳答案

lostCnt++ 在第一次调用 miscFunction() 之前执行。

obj1 构造函数直到构造后 5 毫秒才显示数字。仅在此时调用回调,并且回调直接引用 lostCnt - 而不是创建 obj1 实例时的保存副本。

所以你的假设是正确的,我认为这很明显——传递给 obj1 构造函数的回调直接引用 lostCnt

如果你想做不同的事情,你可以这样做:

setInterval(
function(){
new obj1(5,
function(savedLostCnt) {
return function(){
miscFunction(savedLostCnt);
};
}(lostCnt));
lostCnt++;
},5000
);

关于javascript - 为什么这个带有对象调用函数的 Javascript setInterval 在传入回调时不评估内部参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480104/

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