我对代码的假设是,对于第二个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