这种问题只有2中做法:
1.回调函数。
2.setInterval   一定时间检测,反正检测到就执行,让后就结束检测。

解决方案 »

  1.   

    setTimeout执行时间在1秒后,在它执行之前callback函数就已经执行过了,你想得到11的结果,就把callback置入setTimeout之内
      

  2.   

    就单说异步的那块吧,这种情况只有两种方法改变吧,一个就是把异步改为同步,另一个就是放在回调函数里面。或者,你在外面做一个计时器,一直执行的那种,就是这样function main(callback){
    var a = 10,flag = false;
    setTimeout(function(){
    a++;
    flag = true;
    },1000);

    function aaa(){
    if(flag){
    callback(a);
    }else{
    setTimeout(aaa,200);
    }
    }
    aaa();
    }
    function b(a){
    alert(a);
    }

    main(b);
    其他的办法,暂时就想不到了。
      

  3.   

    1、回调函数
    2、同步请求
    3、setTimeout 去监视是否执行完毕
      

  4.   


    function main(callback) {    
        var a = 10;
        setTimeout(function(){
            a+=1;
        callback(a); //放里面来,放下面都还没有执行a+=1都执行过callback了
        },1000);

    function b(a){ 
        alert(a); 
    }
    main(b); //alert结果是10,不是11
      

  5.   

    不修改那个没有回调接口的异步模块情况下只有定时检测a的值一个办法了function main(callback) {    
    var a = 10;
    setTimeout(function(){
    a+=1;
    },1000);
    var temp = a;
    var _Inter = setInterval(function(){
    if(temp!=a)
    {
    clearInterval(_Inter);
    callback(a); 
    }
    },100);

    function b(a){ 
    alert(a); 
    }
    main(b); //alert结果是10,不是11