访问代码块外部的 let 变量时没有未捕获的引用错误?

问题描述 投票:0回答:1

在学习 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 之前有空格? 为什么这次没有参考错误?

javascript ecmascript-6 scoping
1个回答
0
投票

这与范围无关。

name
是浏览器中的全局属性,即
window.name
。你会在 Node.js 中得到 ReferenceError。

© www.soinside.com 2019 - 2024. All rights reserved.