嵌套循环是否总是在上一次迭代后重置?

时间:2019-05-01 17:30:09

标签: javascript

嵌套循环完成循环后,变量j 是否会重置为零?我认为是这样,因为我们从头开始,但我想确保所有专家与我一致。另外,在哪里可以在教科书中找到答案呢?

const userTextInput = "Hello my name is Luka";
const vowels = ["a", "e", "u", "e", "i"];

for(let i = 0; i <= userTextInput.length; i = i + 1){
  for(let j = 0; j <= vowels.length; j = j + 1){
    if(userTextInput[i] === vowels[j]){
      console.log(vowels[j]);
    }
  }
}

4 个答案:

答案 0 :(得分:1)

从技术上讲,并不完全是。当嵌套的lop完成后,j将不会被定义。仅当它再次开始(对于i的下一次迭代)时,j才会被重置。

例如,以下内容将给您一个j is not defined错误。

for (let j = 0; j < 5; j++)
  ;
console.log(j);

答案 1 :(得分:1)

以下步骤可以帮助您理解代码:

  • 变量j仅存在于嵌套循环内。

  • 当嵌套循环结束时,意味着j <= vowels.length变为false,代码退出循环。

  • 目前没有jj被销毁。
  • 现在,外部for循环再次继续,i递增。

  • 这一次再次创建了一个新变量j并将其初始化为0

  • 这是在i <= userTextInput.length;true

  • 时发生的

答案 2 :(得分:1)

请清楚一点,循环在这里没有做任何特别的事情。 会在每次进入循环时重置变量。

for循环包含3个部分(for (1; 2; 3) {}):

  1. 在开始循环之前运行一次
  2. 检查是否应执行循环主体的条件
  3. 在每次迭代后执行的代码

因此,当您执行此操作时:

for (let j = 0; j < 5; j++) {}

您要声明j并将其设置为0。此总是发生在进入循环之前。然后,在j小于5时执行循环体,并在每次迭代后j递增1。

因为您在j语句中声明了for,所以它仅存在于for循环中。当退出循环时,变量消失了。

但是,即使变量仍然存在于循环外部,您也可以在下次进入循环时将其重置,因为您正在执行j = 0

在此示例中,我将变量声明为for循环外,因此它仍然存在于循环外:

let j = 0;

for (let i = 0; i < 5; i++) {
    for (; j < 5; j++) {
        console.log(`iteration ${j}`);
    }
}

console.log(i);
console.log(j);

// Prints:
// iteration 0
// iteration 1
// iteration 2
// iteration 3
// iteration 4
// undefined
// 4

我省略了for循环的第一部分,因此j永远不会重置。这将导致内部循环仅运行5次,如果每次都将变量重置,则将运行25次。

答案 3 :(得分:0)

是的,每次循环开始时,它都会重新设置为您初始化的值。对于您的情况,是0。