本帖最后由 uniond 于 2011-09-20 16:06:15 编辑

解决方案 »

  1.   

    fnx是个全局变量,a1是局部变量,a1会递增到639,我要fnx的值也为639我要用fnx去做个判断,所以必须要用fnx去获取a1这个局部变量的值按道理来说,this.ax1=function(){if(a1==639){topx=a1;return topx}这个段代码可以让fnx获得a1为639的值,但是没成功,不知道怎么办了
      

  2.   

    这代码的逻辑和书写风格把我征服了。。
    fn.ax1()是在循环前就已经调用了,而且只调用了一次,此时的topx=a1=50,返回并赋值给fnx。。
      

  3.   

    变量是肯定能访问到的
    代码执行到fnx=fn.ax1()时你的ax1方法if条件不满足,是没有返回值的,所以得到的才是undefined,你后面的interver调用并没有给fnx再次赋值,所以它一直都是没有值的
    另外你想要实现文本的移动的吧
    document.getElementById("live1").style.top=a1+"px"
      

  4.   

    这代码的逻辑和书写风格把我征服了。。
    fn.ax1()是在循环前就已经调用了,而且只调用了一次,此时的a1=50,按照你的逻辑并不执行topx=a1;return topx,fnx自然是默认返回值undefined。。
      

  5.   

    对,要让this.ax1=function(){if(a1==639){topx=a1;return topx}不断的interval才能随时获得a1的值,那么怎么实现?
      

  6.   

    难,因为setInterval是异步执行的,所以即使你把fnx=fn.ax1()放到interval后面,这一句还是会在interval之前执行,所以一般不要获取interval执行后的结果,尽量把逻辑在interval调用的方法中都实现了
      

  7.   

    var top1=document.getElementById("live1").style.top;
    var a1,b1,fn,fnx,topx;
    if(parseInt(top1)==50){
    a1=50;
    b1=639;
    }
    var udx1=function(){
    if(a1<b1){
    a1++;
    console.log(a1);
    document.getElementById("live1").style.top=a1;
    if(a1==639){
    return a1;
    }
    }
    }
    while(!topx){
    topx = udx1();
    }
    alert(topx);这是你要的效果吧。。
      

  8.   

    兄台,代码有问题,a1的值应该从50递增,最后达到639才返回a1的值,按你这个代码,函数一运行a1的值就为639了,这个不对
      

  9.   

    我蛋疼了,如果你觉得a1直接就是639的话,你可以在循环里加个alert试试。。
      

  10.   


    这个。。JS没有异步这一说。因为JS是单线程的。。setTimeout与setInterval是把函数放到队列最末端