为什么这个带有对象调用函数的Javascript setInterval在传入回调时不计算内部参数
Why is this Javascript setInterval with object calling function not evaluating the inner parameter when passing in a callback?
下面的脚本输出1 2 3 4 5 6 7.我假设它会输出0 1 2 3 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
实例时保存的副本。
所以你的假设是正确的,我认为这是非常明显的;传递给CCD_ 6构造函数的回调是直接引用CCD_。
如果你想做不同的事情,你可以这样做:
setInterval(
function(){
new obj1(5,
function(savedLostCnt) {
return function(){
miscFunction(savedLostCnt);
};
}(lostCnt));
lostCnt++;
},5000
);
相关文章:
- 要求未定义JS回调参数
- Axios spread()具有未知数量的回调参数
- 节点回调参数无法断言instanceof Error
- each()-将额外的参数传递给回调参数
- AngularJS tokenWrapper-错误的回调参数
- 拉斐尔未运行回调参数
- 使用 jQuery 回调参数通过 AJAX 调用 PHP 函数
- 将函数的执行同步为 node.js 中的回调参数
- 当第一个函数完成没有回调参数时执行第二个函数
- 使用回调参数从函数中获取值
- 如何使用可选的回调参数制作 javascript 函数
- 为什么设置超时's回调参数可以接受参数
- 对 Array.prototype.some 使用额外的回调参数
- 使用Google闭包编译器记录回调参数
- JavaScript Object Literal“;这个“;关键字jQuery回调参数传递
- 在Meteor中运行的回调中未定义回调参数
- 回调参数名称
- 将jQueryajax回调参数定义为现有对象类型
- Reactjs路由器匹配回调参数总是未定义的
- Javascript自定义事件更改回调参数