【发布时间】:2020-12-28 10:42:46
【问题描述】:
我是 Javascript 新手,我不明白范围在以下代码中是如何工作的:
//Code n°1:
let num = 1;
function test(){
console.log(num);
}
test() //As I expected I get in console "1"
//Code n°2:
let num = 1;
function test(){
let num = 2;
console.log(num);
}
test() //As I expected I get in console "2"
但问题来了:
//Code n°3:
let num = 1;
function test(){
console.log(num)
let num = 2;
console.log(num);
}
test() //I expected to get in console "1" and then "2" but instead I get an error.
当我在浏览器中运行代码 n° 3 时,我收到此错误: 未捕获的 ReferenceError:无法在初始化之前访问词法声明 'num'
如果我查看代码 1 和 2,我想在运行代码 3 后,我会在控制台中输入数字 1,然后是数字 2。但这并没有发生。为什么?
非常感谢!
【问题讨论】:
-
我认为它被称为临时死区 - 我假设你知道
var不会发生这种情况 - 我还假设你知道如何提升 var 声明 - 没有这样的提升 let (或const ) -
我原以为错误是关于重新声明
num。相反,错误是关于在初始化之前访问num,如果不深入了解 JavaScript 的解释方式,这是没有意义的,我没有。
标签: javascript function variables scope let