的JavaScript。全局变量不被while循环识别

时间:2016-11-14 10:42:23

标签: javascript while-loop global-variables

我在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

4 个答案:

答案 0 :(得分:4)

因为您的代码进入无限循环。

因为在您的代码中,随机数只生成一次。并且currentCard !== 'Spade'有可能永远变为真,并且它会遇到无限循环/

答案 1 :(得分:4)

通过在循环之外移动随机数,意味着它只被评估一次。

因此第一次循环运行时,如果随机数最终为1以外的任何值,则while循环将无限运行,因为currentCard将始终不等于{{1 }}

所以发生的事情是codeacademy控制台将是无限循环的评估,并可能最终崩溃。

答案 2 :(得分:2)

检查它的最佳方法:使用浏览器控制台。

ctrl(cmd)+shift+i 

结束只需粘贴您的代码并进行检查

答案 3 :(得分:1)

由于randomNumber变量仅分配一次,因此您提供的第二个示例代码存在问题。变量通过值传递给循环,而不是通过引用传递,这意味着在循环内部它不会改变

这意味着分配给randomNumber变量的任何值都将保持不变,直到代码中的其他位置更改为止。请考虑以下示例:

示例1

&#13;
&#13;
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;
&#13;
&#13;

在这种情况下,变量是全局变量,但其值在每次迭代中都会发生变化,就像您在后面的教程中一样。唯一的区别是变量的范围。

示例2

&#13;
&#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;
&#13;
&#13;

在这种情况下,你根本不使用变量,只是功能的结果。 这不是您尝试实现的解决方案,它只是向您展示如何使用函数的结果并在循环的每次迭代中更改它。

总结一下:

randomNumber变量不保留对被调用函数的引用,因此无论您在循环中访问它多少次,它的值都保持不变。如果您希望它是全局的,您可以在循环内更改其值,如示例1 中所示。您可以使用示例2 中显示的方法,按原样使用函数的输出,而无需赋值给变量。