关于范围界定和提升的新手问题? [复制]
Posted
技术标签:
【中文标题】关于范围界定和提升的新手问题? [复制]【英文标题】:Newbie Questions on Scoping and Hoisting? [duplicate] 【发布时间】:2021-10-12 10:22:23 【问题描述】:我正在学习 javascript,我进入了提升/范围部分。我有一些问题,我真的希望有人可以帮助我澄清,这是我的例子:
因此,由于提升,这些正常工作 - firstName 变量在全局范围内,或者可以在我们声明函数之前调用函数:
function test()
console.log(firstName);
const firstName = 'a';
test();
或
const firstName ='a';
test();
function test ()
console.log(firstName)
但是,如果我交换 firstName 和 test() 的顺序,代码将不再工作:
function test()
console.log(`$firstName`)
;
test();
const firstName = 'a';
根据提升,我认为firstName变量在全局范围内。因此,测试函数在执行时应该能够查找变量 firstName。
但是为什么在上面的情况下,它不起作用?
我对提升/作用域的理解有什么问题吗?
【问题讨论】:
const
(和let
)被提升,但它们受到在初始化之前无法访问的临时死区的影响:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
【参考方案1】:
用 let 和 const 声明的变量也会被提升,但不像 for var 变量未使用默认值初始化 不明确的。直到它们被初始化的那一行被执行, 任何访问这些变量的代码都会抛出异常。
MDN DOCS
【讨论】:
以上是关于关于范围界定和提升的新手问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章