我有一个动作列表,执行很多次(20次左右)之后就会造成程序无响应(浏览器、模拟器、Android设备,这三种运行环境下都会发生奔溃),如果是代码有问题,你丫的给我报错信息啊,偏偏卡死(浏览器测试奔溃时关都关不了,只能用任务管理器关闭),也看不到任何报错(都卡死了F12键点不了,打不开控制台),目前也不知道怎么进行debug调试,在eclipse上运行奔溃时也没有什么有用信息打印出来。
上传demotextDemo.zip (1.1 MB)
点击坐标的三角按钮播放动作。播放多次后就会奔溃。或者快速点击三角按钮,同时播放多个动作也会立刻卡死。
团队大大帮我看看吧,是代码有问题?还是粒子效果导致卡死?还是。。?
大哥你 five_win_anim.js 写了死循环了啊。。。。
getRandom_noInclude 函数,你的逻辑没法帮你查了,但是这种死循环的情况,任何程序都没办法给你报错。。。因为根本没出错,只是程序一直在运行。。。

谢谢,解决了,可还是有点疑惑。因为我有时候执行该函数几十次都不会进入死循环。我不是定义了一个flag变量吗,在while循环中一旦取到合适的随机数后应该执行break的,
if(!flag){
result=random;
break;
},
可问题就是前面的这段代码出了问题:
if(random==num){
flag=true;
}
这段代码本来是用来剔除获取到的不适合的随机数的,可它偏偏成为了死循环的导火索。本来是想一旦获取到的随机数与num相同时,让循环继续下去,直到取到不等于num的随机数。但现在情况是,一旦发生了一次random==num,在后续的while循环中random=Math.floor(Math.random()*max)就不在执行,random不再赋值了,这才进入了死循环
if(random==num){
flag=true;
}
后来我加了图片中注释掉的那段绿色字体的代码
else if(random!=num){
flag=false;
}
就没有再出现死循环,可我感觉如果函数进入死循环,这三行代码是没有什么作用的啊,为什么加了这三行代码就不再进入死循环呢?不明白啊,希望有大神解析下js函数执行的顺序逻辑,尤其是循环里面的执行顺序
如果很不巧(或者是很巧?),第一次进入while循环时,就出现random==num ,你的flag就为true了,下面的if(!flag)这个分支就不会再进去了,即使后面出现random!= num的情况,由于flag一直是true,自然不会break循环,所以,你需要加上注释掉的代码才能正确退出循环。另外,random=Math.floor(Math.random()*max)这句话在每次循环时,应该还是执行的,你可以在这句之后紧接着输出random看看,不是放在你的if(random==num)里面
用来是我疏忽了,我一直以为flag是放在括号里面的