关于范围界定和提升的新手问题? [复制]

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

【讨论】:

以上是关于关于范围界定和提升的新手问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 范围界定问题

您是不是使用花括号进行额外的范围界定? [关闭]

关于工人的界定,急!!

项目范围管理

反编译一个android apk? [复制]

什么是签名字符? [复制]