我对代码的假设是,对于第二个let x,其上方的代码位于时间盲区中。因此,不应抛出错误。





function f(condition, x) {
  if (condition) {
    let x = 100;
    return x;
  }
  let x = 30; // <---- throw error

  return x;
}

f(true, 1);

最佳答案

好了,这里的问题是您要在同一x中重新声明同一变量function两次,因此将提升该变量x

  if (condition) {
    //This x declaration is fine as it wasn't preceded with any others declaration inside the same block scope
    let x = 100;
    return x;
  }
  //Now this second x declaration will cause the hoisting problem
  let x = 30; // <---- throw error


在这里,第二个let x = 30;声明正在提升x范围内的function变量。因此结论是,您不能在同一范围内多次声明同一变量。

要进一步了解Java语言中的可变提升,您可以检查:


MDN Hoistingreference
A guide to JavaScript variable hoisting 🚩 with let and const article

10-05 23:13
查看更多