代码之家  ›  专栏  ›  技术社区  ›  Henry Yang

是在循环内部和外部使用相同的[duplicate]

  •  0
  • Henry Yang  · 技术社区  · 6 年前

    这个问题已经有了答案:

    当我阅读本文中的示例6时,这个问题突然出现在我的脑海中。 https://stackoverflow.com/a/111111/6359753

    两者之间有什么区别吗

    // Example 1
    let i;
    var arr = [1,2,3]
    for (i=0; i<arr.length; i++){
     // do stuff
    }
    

    // Example 2
    var arr = [1,2,3]
    for (let i=0; i<arr.length; i++){
     // do stuff
    }
    

    如果它们是相同的,为什么它们是相同的?

    换句话说,我不太明白 let 的范围。如果在循环外部声明,它们的作用域是否在循环外部?示例2的let显然是在for循环内的作用域,但是示例1我不太确定。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Suren Srapyan    6 年前

    如果在 for 循环,它只在循环体中可见。环路外 i 不可见。

    var arr = [1,2,3];
    
    for (let i=0; i<arr.length; i++) {
     
    }
    
    console.log(i);

    如果在 对于 循环,变量的作用域是最近的包围块 {} .

    let i;
    var arr = [1,2,3];
    
    for (i = 0; i < arr.length; i++) {
    
    }
    
    console.log(i);
        2
  •  1
  •   Mamun    6 年前

    不,从范围上看,它们不一样。

    在第一个示例中,变量 i 是全局变量,可以在整个程序中访问。但在第二个例子中, 是本地的 for 因此,只能循环 无法从外部访问 对于 循环。

        3
  •  -2
  •   Domenik Reitzner    6 年前

    Here 是一篇解释var、let和const之间区别的文章。

    我对JS如何在后台处理变量进行了很好的概述。

    它解释了变量的提升、范围(这是您的问题)以及在使用let和const时如何避免一些陷阱。