何时使用const或var或let和lambda表达式内部

时间:2018-07-03 10:26:05

标签: javascript

java -jar myWorkingJar.jar
  1. 在这种情况下,是否有逻辑/理由用#!/bin/bash JARNAME=myJar.jar # enter your JAR's name here OUT_JARNAME=myJar_out.jar # enter your output JAR's name here # Creating the directory, unpacking the JAR, entering META-INF/ mkdir temp unzip $JARNAME -d temp cd temp/META-INF # Renaming the troublemakers. rename 's/\.DSA$/.DSA.old/' * rename 's/\.SF$/.SF.old/' * # Reassembling the JAR cd ../ jar cfm ../$OUT_JARNAME ./META-INF/MANIFEST.MF -C ./ . cd ../ # Uncomment this line if you wish to delete the temp directory upon finish. # rm -r temp 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; } 定义s
  2. js在lambda表达式中的代码背景中做什么? 它是否将var的值保留在可以快速处理并避免某些let循环的某些数据结构中?

3 个答案:

答案 0 :(得分:2)

var的作用域为 nearest 功能块,而let的作用域为 nearest 封闭模块。

让我们假设您有一个函数,并且在该函数内部有一个for循环。如果使用var定义和声明迭代器,则可以在函数外部访问它:

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

  // i is 6
  console.log(i);
} 

如果您改用let,则i的作用域将仅限于最近的封闭块,即for循环:

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

  // i is undefined
  console.log(i);
}

但是通常来说,至少在使用ES2015时,我几乎永远不会在var上使用let。也就是说,我真的无法想到var有意义而let没有意义的情况。另外,如果您需要重新分配变量,请使用let,并且如果永不重新分配变量,请使用const

请记住,const仅表示原始值而不是对象的不变性,这意味着即使您使用const,您仍然可以更改对象的属性。它只能防止重新分配变量。

在大多数情况下,我个人使用const

答案 1 :(得分:1)

有很多不错的资源,它们提供了有关 [link1link2]的更多详细信息。摘要如下:

  • :块范围和初始化是可选的。
  • 常量:需要块范围和初始化。
  • var :分配是可选的,其作用域不受限制。

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


现在有了一些上下文,可以内联查询查询:

  • 在这种情况下,是否有逻辑/理由用varlet定义s?
      如上所述,
    • var在约束方面要宽松得多,因此全局范围内具有相同标识符的任何变量都将受到影响。 let使此块处于范围内。
  • js在lambda表达式中的代码背景中做什么?它是否将组的值保留在可以快速处理并避免某些forEach循环的某些数据结构中?
    • 上面的lambda表达式只是函数声明。这里的find函数采用arrow函数来执行布尔检查。

答案 2 :(得分:-1)

let 和 const 键相同,只有不同之处

let 关键字是块范围的,它可以在块内访问,并且与 const 相同,我们不能直接更改 const 变量的值,但可以更改对象的引用。