我对js名称空间没有很好的把握,而且我已经成为了WAGing *的标题,但这是我对发生的事情的猜测之一。
我的应用程序崩溃了(戏剧性地);试图找出原因。事实上,在3对Q / A对之后,它会炸毁整个Chrome标签..! 我开始怀疑我的代码中我做错了什么......
警告:在运行这些jsFiddles之前保存您的浏览会话。 (在Chrome中,jsFiddle只会炸掉自己的标签,但我无法对其他浏览器发表评论)
jsFiddle One
jsFiddle Two - dupe in case jsFiddle One blown away
请帮助我准确理解我今天所犯的那种壮观的愚蠢行为。
HTML:
<div id="result">
<div class="truth tr0"><h2>---</h2></div>
<div class="truth tr1"><h2>answer to one</h2></div>
<div class="truth tr2"><h2>answer to two</h2></div>
<div class="truth tr3"><h2>answer to three</h2></div>
<div class="truth tr4"><h2>answer to four</h2></div>
</div>
<div id="replaceLink">
<div class="youcould yc1">
<a href="#2"><h2>QUESTION ONE</h2></a>
</div>
<div class="youcould yc2">
<a href="#3"><h2>QUESTION TWO</h2></a>
</div>
<div class="youcould yc3">
<a href="#4"><h2>QUESTION THREE</h2></a>
</div>
<div class="youcould yc4">
<a href="#5"><h2>QUESTION FOUR</h2></a>
</div>
<div class="youcould yc5">
<a href="#6"><h2>THANK YOU</h2></a>
</div>
</div>
<div id="response"></div>
<input type="button" id="mybutt" value="Start Test" />
的Javascript / jQuery的:
var cnt = 0;
var window = {};
window.arrDone = [];
function nextQues() {
if (window.arrDone.length == 4) return 5;
success = 0;
while (success == 0) {
nn = Math.floor(Math.random() * 3) + 1;
if (window.arrDone.indexOf(nn) == -1 && nn != 5) {
success++;
window.arrDone.push(nn);
}
}
return nn;
}
$('.youcould, .truth').hide();
$('.tr0').show();
$('.youcould').click(function() {
$(this).hide();
thisA = window.arrDone[window.arrDone.length -1];
$('.tr'+thisA).show();
});
$('.truth').click(function() {
$(this).hide();
nextQ = nextQues();
$('.yc'+nextQ).show();
});
$('#mybutt').click(function () {
$(this).hide();
$('.tr0').hide();
nextQ = nextQues();
$('.yc'+nextQ).show();
});
答案 0 :(得分:5)
我的猜测是
var window = {};
window
很特殊,因此创建一个名为window
的全局变量正在乞求麻烦。
答案 1 :(得分:2)
在某些时候,arrDone
将包含由随机生成器(永远不会生成{{1})生成的数字1
,2
和3
},顺便说一句。在这种情况下,5
不会中止并返回五(作为nextQues()
),并将进入循环。您的随机生成器只生成数字arrDone.lenght == 3
,1
和2
,它们总是已经在数组中,因此if条件(将结束循环)是从未实现。你有一个无限循环产生随机数。
我猜你想要
3
答案 2 :(得分:2)
你的while循环在第三遍中无限运行,因为它不符合条件。