行动范围问题

时间:2018-01-25 03:22:17

标签: typescript scope

我宣布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




1 个答案:

答案 0 :(得分:0)

以下是您问题的简短版本......

您在全局范围内声明test

constlet是块范围的(而不是功能范围的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