因此,这种排序算法是我从这里开始的,我只是想绕过它的工作方式。当我将alert(i)
置于此位置时,它会按预期发出五次警报。
function shuffle(a) {
for (let i = a.length; i; i--) {
alert(i)
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
但如果我把它放在这个位置,它只会提醒一次。
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
alert(i)
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
造成这种情况的原因是什么?这个循环还没有运行5次吗?
答案 0 :(得分:2)
简单的答案是alert
导致问题后省略的分号:
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
alert(i)
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
第4 + 5行被解析为:
alert(i)[a[i - 1], a[j]] = [a[j], a[i - 1]];
意味着JS解释器试图以数组的形式访问警报的返回值(显然不是这样)。该错误会阻止您的循环继续,因此您只能获得第一个警报。
我建议您阅读Ben Alman's blog post(讽刺咆哮)以获取更多关于JavaScript中分号的内容。