我宣布const test
,并重新声明它是否正常,它起作用,为什么?
如果我在if或函数中声明test
,则控制台.log(test)会出错。
[ts] Block-scoped variable 'test' used before its declaration.
如果我没有宣布它,它的工作,为什么?
const test = 'this is a test';
if (true) {
// console.log(test); // error, test is not declaration
const test = "this is add word"
console.log(test) // this is add word
}
if(true) {
console.log(test) // this is a test
}
const work = () => {
const test = "this is a work!"
console.log(test) // this is a work!
}
work()
console.log(test) // this is a test

答案 0 :(得分:0)
以下是您问题的简短版本......
您在全局范围内声明test
。
const
和let
是块范围的(而不是功能范围的var
)所以当你得到一些花括号时,你也会得到一个新的范围。 / p>
因此,在大括号内,您有一个新的范围,在此范围内,您决定声明一个具有相同名称test
的新的块范围变量。在那些花括号内,你的局部变量是唯一存在的 - 否则会对你想要的变量产生强烈的混淆。
最终,如果您打算使用外部test
,请不要声明另一个具有相同名称的变量。
如果您打算覆盖原始变量,则应使用let
代替const
,并且不要在新范围内再次指定let
关键字。
const test = 'this is a test';
if (true) {
console.log(test); // this is a test
const test2 = "this is add word";
console.log(test2); // this is add word
}
if(true) {
console.log(test); // this is a test
}
const work = () => {
const test = "this is a work!";
console.log(test); // this is a work!
}
work()
console.log(test); // this is a test