我在codecadamy.com上使用Javascript教程的午餐时间。
我有这个简单的循环:
<tr>
<td>NIM</td>
<td><input type="text" placeholder="enter nim" name="nim"></td>
</tr>
这很好,但是如果我从循环中删除var cards = ['Diamond', 'Spade', 'Heart', 'Club'];
var currentCard = 'Heart';
while (currentCard !== 'Spade') {
console.log(currentCard);
var randomNumber = Math.floor(Math.random() * 4);
currentCard = cards[randomNumber];
}
console.log('Found a Spade!');
并放置其他全局变量,则codecademy console不会打印结果...
由于全局变量应该可用于该循环,我认为codecademy控制台有问题吗?
你是否同意这应该有用?
randomNumber
答案 0 :(得分:4)
因为您的代码进入无限循环。
因为在您的代码中,随机数只生成一次。并且currentCard !== 'Spade'
有可能永远变为真,并且它会遇到无限循环/
答案 1 :(得分:4)
通过在循环之外移动随机数,意味着它只被评估一次。
因此第一次循环运行时,如果随机数最终为1
以外的任何值,则while循环将无限运行,因为currentCard
将始终不等于{{1 }}
所以发生的事情是codeacademy控制台将是无限循环的评估,并可能最终崩溃。
答案 2 :(得分:2)
检查它的最佳方法:使用浏览器控制台。
ctrl(cmd)+shift+i
结束只需粘贴您的代码并进行检查
答案 3 :(得分:1)
由于randomNumber
变量仅分配一次,因此您提供的第二个示例代码存在问题。变量通过值传递给循环,而不是通过引用传递,这意味着在循环内部它不会改变。
这意味着分配给randomNumber
变量的任何值都将保持不变,直到代码中的其他位置更改为止。请考虑以下示例:
var cards = ['Diamond', 'Spade', 'Heart', 'Club'];
var currentCard = 'Heart';
var randomNumber = Math.floor(Math.random() * 4);
while (currentCard !== 'Spade') {
console.log(currentCard);
randomNumber = Math.floor(Math.random() * 4);
currentCard = cards[randomNumber];
}
console.log('Found a Spade!');
&#13;
在这种情况下,变量是全局变量,但其值在每次迭代中都会发生变化,就像您在后面的教程中一样。唯一的区别是变量的范围。
var cards = ['Diamond', 'Spade', 'Heart', 'Club'];
var currentCard = 'Heart';
while (currentCard !== 'Spade') {
console.log(currentCard);
currentCard = cards[Math.floor(Math.random() * 4)];
}
console.log('Found a Spade!');
&#13;
在这种情况下,你根本不使用变量,只是功能的结果。 这不是您尝试实现的解决方案,它只是向您展示如何使用函数的结果并在循环的每次迭代中更改它。
总结一下:
randomNumber
变量不保留对被调用函数的引用,因此无论您在循环中访问它多少次,它的值都保持不变。如果您希望它是全局的,您可以在循环内更改其值,如示例1 中所示。您可以使用示例2 中显示的方法,按原样使用函数的输出,而无需赋值给变量。