循环基础

问题描述

有人可以让我知道我在哪里出问题了吗?运行代码时,我得到10、9、8、7、6、5、4、3、2、1、10。如何使循环在0处停止?当我删除最后一行代码(console.log(countDown);)时,循环结束于0,但挑战尚未完成。任何帮助将不胜感激!

使用for循环,每次循环运行时将countDown减一,直到等于0,利用循环功能而不是分别记录每个数字。

let countDown = 10;
// ADD CODE HERE
for (let countDown = 10; countDown>0;countDown--)
{
  console.log(countDown);
}

// Uncomment the below line to check your work
console.log(countDown) // -> should print 0;

解决方法

问题是,在countDown循环的初始化部分中,您的代码中有两个for变量,一个在顶部,一个声明为循环变量。

它们都是不同的变量。循环已正确终止,但是在循环后记录countDown变量时,您没有记录循环中使用的变量,而是记录了循环上方声明的变量。

您无需在循环中声明countDown变量,只需使用在循环上方声明的变量即可。

let countDown = 10;

for (; countDown > 0; countDown--) {
  console.log(countDown);
}

console.log(countDown) // -> should print 0;

,

循环不是问题-范围可变是问题。有关范围的信息,请参见以下链接:wiki

let countDown = 10; // global scope - visible everywhere

for (let countDown = 10; countDown>0;countDown--) // local scope -- visible only in the loop
{
  console.log(countDown);  // this is again the inner variable with local scope
}

console.log(countDown) // the global scope variable again,hence 10;

对于问题本身,实际上您有两个具有相同名称countdown的变量。一个在循环外定义,另一个在循环声明中定义。后者遮蔽(隐藏)前者,因此对内部变量所做的任何更改(范围较小,仅包含循环主体)在循环结束后均不可见。因此,实际上,您的代码不会更改外部countdown的值。

要使其工作,请不要声明内部变量,而将外部变量重新用作循环计数器:

let countDown = 10;

for (; countDown > 0; countDown--) {
    console.log(countDown);
}

console.log(countDown);