【发布时间】:2021-08-11 05:02:57
【问题描述】:
let x = '1'
function first(){
console.log(x)
}
x='2'
function second(){
let x='3'
first()
}
second()
我的问题是,为什么答案是“2”而不是“3”? 我知道 let 是块作用域而 var 是函数作用域,但我只是不明白这一点。请在这里帮助我,谢谢!
【问题讨论】:
-
因为
let x='3'范围在second中,但console.log(x)在first... 所以全局x是它记录的x- 请注意范围let与var无关 - 如果您使用var而不是let,结果将是相同的 - 此外,因为您的外部let在全局范围内,而内部 @987654333 @ 在函数范围内,也没有“块范围”在起作用 -
@DBS - 不涉及
this,因此上述变量的范围不会改变 -
因为 let x = '3' 不是全局变量。让 x = '1';是在所有地方使用的全局变量。在下一步中,您可以将 x 值 1 更改为 2。这就是为什么您的 Ans 为 2。
标签: javascript hoisting