代码之家  ›  专栏  ›  技术社区  ›  Yanshof

何时使用const或var或let和lambda expresion内部

  •  0
  • Yanshof  · 技术社区  · 6 年前
    groups= [];
    
    getGroup(id){
        const s = groups.find(t => t.id === id);
        return s;
    }
    
    getGroup(id){
        var s = groups.find(t => t.id === id);
        return s;
    }
    
    
    getGroup(id){
        let s = groups.find(t => t.id === id);
        return s;
    }
    
    1. 是否有任何逻辑/理由来定义 s 具有 var let 在这种情况下?
    2. JS在lambda表达式中的代码后台做什么? 它保持了 group 在某些数据结构中,可以快速处理并避免 forEach 循环?
    2 回复  |  直到 6 年前
        1
  •  2
  •   LordTribual    6 年前

    var 范围为 最近的 功能块,而 let 范围为 最近的 封闭块。

    假设你有一个函数,在这个函数里面有一个for循环。如果使用 var 您可以在以下功能之外访问它:

    function foo() {  
      for(var i = 0; i <= 5; i++) {
        console.log(i);
      }
    
      // i is 6
      console.log(i);
    } 
    

    如果你使用 相反, i 将仅限于最近的封闭块,即for循环:

    function foo() {  
      for(let i = 0; i <= 5; i++) {
        console.log(i);
      }
    
      // i is undefined
      console.log(i);
    }
    

    但一般来说,我几乎从不使用 var 结束 至少在我使用ES2015的时候。也就是说,我真的想不出 var 会有意义的 不是。此外,如果需要重新分配变量,请使用 如果变量从未重新分配,则使用 const .

    记住那些 康斯特 只表示基元值不变,而不是对象不变,这意味着即使使用 康斯特 . 它只防止重新分配变量。

    就个人而言,在大多数情况下,我使用 康斯特 .

        2
  •  1
  •   nitishagar    6 年前

    有很多好的资源可以提供更多的细节 [link1 , link2] . 总结如下:

    • :块范围和初始化是可选的。
    • 康斯特 :需要块范围和初始化。
    • var :赋值是可选的,不是块范围的。

    与您的 lambda表达式 -这些是JavaScript中的箭头函数,为函数表达式提供了较短的语法。


    现在,在给定一些上下文的情况下,直接回答您的查询:

    • 是否有任何逻辑/理由用 var let 在这种情况下?
      • var 在约束方面要宽松得多,如上所述,因此具有相同标识符的全局范围中的任何变量都会受到影响。 保持此块的作用域。
    • JS在lambda表达式中的代码后台做什么?它是否将组的值保存在能够快速处理此问题并避免某些foreach循环的数据结构中?
      • 上面的lambda表达式只是函数声明。这个 find 这里的函数接受arrow函数来执行布尔检查。