【发布时间】:2020-12-25 14:09:31
【问题描述】:
我正在尝试理解提升的概念,如果我使用 var 而不是 const 或 let 代码可以正常工作,但是当我使用 const 或 let 时会抛出错误,我如果在本地找不到,为什么 JS 运行时不考虑全局范围,我有点困惑。
const name = "Abc";
function logName() {
console.log('1. Name is => ', name);
const name = "Grapes";
console.log('2. Name is => ', name);
}
logName();
【问题讨论】:
-
你可以使用
this.name在你的函数中调用全局声明的name变量 -
这是由于它的内部块作用域,如果您删除第二个 const 声明,它将起作用。 (但是,您根本不应该重新分配
const变量,它们应该是let)。您可以在官方文档中阅读更多相关信息。 -
阅读:freecodecamp.org/news/what-is-the-temporal-dead-zone 简短的回答是:因为
let和const就是按照规范设计的。 -
理解“提升”的最好方法是忽略“提升”这个词和 99% 的关于提升的文章,看看 javascript 解释器的编译和执行/评估阶段。请参阅我对这个老问题的回答:stackoverflow.com/questions/3887408/…
标签: javascript scope hoisting