在理解javascript中的词法作用域时遇到困难

在理解javascript中的词法作用域时遇到困难,javascript,scope,lexical-scope,Javascript,Scope,Lexical Scope,我正在读一些书,学习javascript,我看到javascript使用词汇范围 词法作用域是指在您定义的范围内的任何变量 来自的函数(与调用时相反)位于 作用 我尝试了一些基本的例子: function f() { console.log(x); } const x = 10; f(); // 10 那么这是如何工作的,为什么它记录值为10?定义函数时变量x不存在。我是javascript noob,所以我可能遗漏了一些东西。提前感谢。这是由于一个名为提升的概念。 本质上,任何声明都会移

我正在读一些书,学习javascript,我看到javascript使用词汇范围

词法作用域是指在您定义的范围内的任何变量 来自的函数(与调用时相反)位于 作用

我尝试了一些基本的例子:

function f() {
  console.log(x);
}
const x = 10;
f(); // 10

那么这是如何工作的,为什么它记录值为10?定义函数时变量x不存在。我是javascript noob,所以我可能遗漏了一些东西。提前感谢。

这是由于一个名为提升的概念。 本质上,任何声明都会移动到范围的顶部,因此始终可以在范围中的任何位置访问

在定义函数id期间,词法作用域捕获对x的引用

将x指定为10的柱子


提升在这里是不相关的(无论如何,分配不会提升到功能声明之上)。不得使用赋值运算符。
const
关键字(与
var
不同)也未被提升。但引用是。重新编辑:否。
const
语句未被提升。由于未提升
const
而引发引用错误。抛出语法错误,因为如果不为常量赋值(或稍后为其赋值),则无法拥有常量。常量被提升(但在赋值之前仍处于暂时死区)。当然,参考文献仍然存在。请查看6:50。它很好地描述了词法范围。我觉得这很有帮助。