javascript - 为什么我无法在这个简单的函数中访问这个变量?

标签 javascript function variables scope let

我是 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 时,我收到此错误: Uncaught ReferenceError :在初始化之前无法访问词法声明“num”

如果我查看代码 1 和 2,我想在运行代码 3 后,我将在控制台中看到数字 1,然后是数字 2。但这并没有发生。为什么?

非常感谢!

最佳答案

当在初始化之前访问词法变量时,会发生 JavaScript 异常“在初始化之前无法访问词法声明‘变量’”。当在定义之前访问 let 或 const 声明时,这种情况会发生在任何 block 语句中。

关于javascript - 为什么我无法在这个简单的函数中访问这个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63821129/

相关文章:

javascript - 使用变量更改 CSS 和 JS

c - 函数返回值定义为常量

ruby-on-rails - 如何检查是否存在值不为 "undefined local variable or method"的变量?

javascript - undefined 和 null 的大小

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - react 器模式在 Node.js 中是如何工作的?

javascript - 如何使用 JSON 文件在 HTML 中动态创建元素

javascript - 如何使用 Lodash 按多个键分组并将其值汇总到对象数组中?

javascript - Charts.js 使用货币和千位分隔符格式化 Y 轴

Swift Firebase 在整个应用程序中重用一个函数