各位仁兄,函数内局部变量赋值给全局变量不成功,如何解决? 本帖最后由 uniond 于 2011-09-20 16:06:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 fnx是个全局变量,a1是局部变量,a1会递增到639,我要fnx的值也为639我要用fnx去做个判断,所以必须要用fnx去获取a1这个局部变量的值按道理来说,this.ax1=function(){if(a1==639){topx=a1;return topx}这个段代码可以让fnx获得a1为639的值,但是没成功,不知道怎么办了 这代码的逻辑和书写风格把我征服了。。fn.ax1()是在循环前就已经调用了,而且只调用了一次,此时的topx=a1=50,返回并赋值给fnx。。 变量是肯定能访问到的代码执行到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。。 对,要让this.ax1=function(){if(a1==639){topx=a1;return topx}不断的interval才能随时获得a1的值,那么怎么实现? 难,因为setInterval是异步执行的,所以即使你把fnx=fn.ax1()放到interval后面,这一句还是会在interval之前执行,所以一般不要获取interval执行后的结果,尽量把逻辑在interval调用的方法中都实现了 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);这是你要的效果吧。。 兄台,代码有问题,a1的值应该从50递增,最后达到639才返回a1的值,按你这个代码,函数一运行a1的值就为639了,这个不对 我蛋疼了,如果你觉得a1直接就是639的话,你可以在循环里加个alert试试。。 这个。。JS没有异步这一说。因为JS是单线程的。。setTimeout与setInterval是把函数放到队列最末端 谁有 js 或者 jquery 的抽奖源码? 求一段js匹配正则,取得value的值 求大家帮我写一个验证数量带K的正则 元素的定位问题 全套w3school Web 教程 javascript和applet交互的问题 IE和火狐使用dialog的区别 如何做到这样的滚动效果? 在网页对话框里提交表单会打开新窗口,如何解决? 在浏览器中,avi,rm,asf,wmv,mpeg,mov,ipix等格式的文件怎么打开,需要什么插件,在线等,提供信息就给分 到底是自己没销毁,还是闭包中被保存一份 鼠标点击过快时,效果冲突
fn.ax1()是在循环前就已经调用了,而且只调用了一次,此时的topx=a1=50,返回并赋值给fnx。。
代码执行到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。。
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);这是你要的效果吧。。
这个。。JS没有异步这一说。因为JS是单线程的。。setTimeout与setInterval是把函数放到队列最末端