javascript中这三种变量声明之间的区别是什么?

时间:2019-04-18 10:16:12

标签: javascript

我是JS的新手,在以三种方式声明变量时遇到了一些问题

These are test cases i have tried

以我的理解

a = "a";

var a = "var a";

(全局声明)是同一件事

但是

let a = "let a"

声明为局部变量

所以我已经测试了一些组合

let a ="let a"
a ="a"

工作

但是

let a = "let a"
var a = "var a"

不起作用

你能告诉我为什么吗?

2 个答案:

答案 0 :(得分:0)

var是函数作用域,letconst是块作用域声明。而且您不能在同一作用域中两次声明一个变量(这不是完全正确的,因为由于向后兼容,您可以在同一作用域中有两个var a)。

因此,这取决于您编写上一个示例的位置:

function foo() {
  let a = "let a"
  var a = "var a"
}

失败,因为let avar a都在同一范围内定义了a

function test() {
  if (true) {
    let a = "let a"
    var a = "var a"
  }
}

之所以可行,是因为它们是在不同的范围内定义的,因为这等同于写:

function test() {
  var a
  if (true) {
    let a = "let a"
    a = "var a"
  }
}

答案 1 :(得分:-1)

您应该从here阅读有关javascript的不同类型的变量声明的更多信息。基本上区别是: 1. var声明是全局范围的或函数/局部范围的。 var变量可以重新声明和更新。 2. let是块作用域的。 let变量可以更新,但不能重新声明。

所以回答您的问题:

let a ="let a" 
a ="a" // This works as you are reassigning the let variable, not redeclaring it.

let a = "let a";
var a = "a"; // This won't work as you are redeclaring the variable.