我是JS的新手,在以三种方式声明变量时遇到了一些问题
以我的理解
a = "a";
和
var a = "var a";
(全局声明)是同一件事
但是
let a = "let a"
声明为局部变量
所以我已经测试了一些组合
let a ="let a"
a ="a"
工作
但是
let a = "let a"
var a = "var a"
不起作用
你能告诉我为什么吗?
答案 0 :(得分:0)
var
是函数作用域,let
和const
是块作用域声明。而且您不能在同一作用域中两次声明一个变量(这不是完全正确的,因为由于向后兼容,您可以在同一作用域中有两个var a
)。
因此,这取决于您编写上一个示例的位置:
function foo() {
let a = "let a"
var a = "var a"
}
失败,因为let a
和var 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.