在学习 javascript 时,我遇到了 2 个不同的代码片段,并且我对使用 let/const 声明的变量的范围感到困惑。我知道使用 let/ const 声明的变量是块作用域的,这意味着您无法在声明它们的块之外访问它们。
以下两个片段相互矛盾,为什么会这样?
片段 1:参考错误如预期
const calculateArea = function(radius){
let area = 3.14 * radius ** 2;
console.log(area);
}
console.log(area)
片段 1 的输出:
ReferenceError: area is not defined
at <anonymous>:12:13
at mn (<anonymous>:16:5455)
片段 2:为什么没有错误???
let age = 30;
if(true){
let age = 40;
let name = 'Peter';
console.log('Inside if block: ', name, age);
}
console.log('Outside if block: ', name, age);
片段 2 的输出:
Inside if block:
Peter
40
Outside if block:
30
在 if 块语句外部记录到控制台时,为什么 Age 之前有空格? 为什么这次没有参考错误?
这与范围无关。
name
是浏览器中的全局属性,即window.name
。你会在 Node.js 中得到 ReferenceError。