var s=0;
for(var i=0;nn!=null&&i<nn.length;i++){//长度为10
alert(i+"test");
setInt=setTimeout((function(node){return function(){
if(s==i){
alert(s+"s"+i+"i");//这里的s和i为什么弹出10次10啊,怎么不是从0开始到10
var node=new Node();
node=mixIn(nn[i],node);
node.type=typeToNum(node.type);
node.position=new Position(node.position.top,node.position.left);
nodes[node.index]=node;
createNode(node);
}else{
clearTimeout(setInt);
}
}})(node),3000);
s=s+1;
}谁会指点一下

解决方案 »

  1.   

    第一次循环s = 0;先执行alert('0test');后执行setInt,但由于这个方法是3秒钟再执行(相当于多线程吧),所以s+=1先执行,此时s=1,
    接着第二次循环,以此类推,当循环完10次后,s=10,i=10,还没有经过3秒,故等到三秒中后alert(‘10s10i’)才第一次打印,接着很快就打印其余9次了。
      

  2.   

    真心看不懂你这段代码是想干什么。。作为形参的node,居然是在函数内部才定义。。这是典型的闭包问题,给你个简单的例子            var s = 0, setInt;
                for (var i = 0; i < 10; i++) {
                    (function(){
                        var index = i;
                        setInt = setTimeout(function(){
                            if (s === index) {
                                alert("success! i: " + index);
                            }
                            else {
    alert("error! i: " + index);
                             clearTimeout(setInt);
                            }
                        }, 3000);
                    })();
                }
      

  3.   

    这是根据你的代码改的            var s = 0, setInt;
                for (var i = 0; i < 10; i++) {//长度为10
                    setInt = setTimeout((function(){
                        var _i = i;
                        return function(){
                            if (s == _i) {
                                alert("s: " + s + ", i: " + _i);//这里的s和i为什么弹出10次10啊,怎么不是从0开始到10
                                s++;
                            }
                            else {
                                clearTimeout(setInt);
                            }
                        }
                    })(), 3000);
                }
      

  4.   

    类似
    var a = 10;
    var b = 0;function test(){
        b++;
        if(b < a){
            setTimeout("test()",5000);
        }
        alert(b);
        
    }test();
      

  5.   

    别自己创造。去看看相关的实现方法。
    要实现这种需求,从没有在FOR里用setTimeout的,都是把FOR去掉,把setTimeout作为FOR的功能,在setTimeout里面进行计数。
      

  6.   


    for(var i=0;i<10;i++){
    (function(i){
    setTimeout(function(){
    alert(i)
    },i*3000)
    })(i)};这个意思?