2

以下脚本输出 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>

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

4

1 回答 1

1

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

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

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

如果你想以不同的方式做,你可以这样做:

setInterval(
    function(){
        new obj1(5, 
          function(savedLostCnt) {
            return function(){
                miscFunction(savedLostCnt);
            };
          }(lostCnt));
        lostCnt++;
    },5000
);
于 2012-07-14T01:01:55.870 回答