注册 登录
编程论坛 JavaScript论坛

一段代码,找不到错误原因,求帮忙

vbjava 发布于 2015-01-11 12:20, 416 次点击
程序代码:


var timeCirculate;
var strCirculateMSG = "";
var blnCirculate = false;

function Fun(array,fun1,fun2){

    var i=0,len = array.length; //这里要注意在执行过程中数组最好是不变的
   
    var arr;// 用于判断是否中断递归操作

    timeCirculate = setTimeout(function(){


        arr = fun1( array[i] , i++ ); //循环体要做的操作
        blnCirculate = arr[0];
        strCirculateMSG = arr[1];

        //alert(blnCirculate);
        //alert(strCirculateMSG);


        // 正常 循环体内
        if(blnCirculate){
            if( i < len ){
               
                timeCirculate = setTimeout(arguments.callee(array,fun1,fun2),0);

            }else{
               
                fun2(); //循环结束之后要做的操作
            }
        
        // 异常,退出循环
        }else{

            fun2(); //循环结束之后要做的操作
        }
    },0);
}

function a(value,i){

    if(value == 3){
        return [false,"错啦"];
    }
    return [true,""];
}
function b(){
   
    clearTimeout(timeCirculate); // 清除 setTimeout
}

var arr=new Array(1,2,3);
Fun(arr,a,b);

alert(blnCirculate);
alert(strCirculateMSG);


如果在 Fun方法内 alert 2个变量,就能得到需要的数据,可如果在 Fun外却总是初始定义的值,为什么 Fun 方法内无法修改 外部定义的 blnCirculate    strCirculateMSG 2个 变量的值哪?要如何修改
2 回复
#2
砖家的谎言2015-01-16 13:42
你具体想做什么呢?
#3
vbjava2015-01-16 18:29
这个就是模仿for循环,如果循环次数太多,页面会出现假死现象,用这个就是 把每次循环做的事情,利用 setTimeout 的方法交给系统,可以避免假死现象
1