日期:2014-05-16  浏览次数:20347 次

各位仁兄,函数内局部变量赋值给全局变量不成功,如何解决?
<span id=live1 style=position:absolute;left:250px;top:50px;width:109px; height:15px>这个文本</span>
<script language=JavaScript>
top1=document.getElementById("live1").style.top
var a1,b1,fn,fnx,topx
if(parseInt(top1)==50){a1=50;b1=639}
udx1=function(){
if(a1<b1){a1++;document.getElementById("live1").style.top=a1}
this.ax1=function(){if(a1==639){topx=a1;return topx}}
}
fn=new udx1
fnx=fn.ax1()
setInterval("udx1()",1)
</script>
-----------------------------------------
请教各位仁兄,为何fnx这个全局变量不能获取udx1函数内部的局部变量a1的值?fnx的值要为639才正确。如何解决?

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

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

------解决方案--------------------
探讨

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

引用:

对,要让this.ax1=function(){if(a1==639){topx=a1;return to……