这个问题在这里已经有了答案:
Why does block assigned value change global variable? [duplicate]
(4 个回答)
1年前关闭。
下面的代码记录值 a
作业后
var a = []
if (true) {
a = 1
function a() {}
a = 2
function a() {}
a = 3
console.log('0: ', a)
}
console.log('1: ', a)
我怀疑输出可能是:
0: 3
1: 3
但实际上上面的代码记录了0: 3
1: 2
为什么?
最佳答案
我的理解是,有两个“a”变量。
一个是全局的,一个在括号范围内。
在第一次分配中,您将其分配给全局。
当您声明“a”函数时。它具有本地范围。
它将“a”中的当前值分配给全局值。
然后,当您再次为“a”分配一个值时,它会将其分配给本地范围变量。
出于某种原因,重新声明函数名称会使其将局部变量的值分配给全局变量。不知道为什么。
var a = [] // assigns to global
if (true) {
a = 1 // assigns to global
function a() {} // pushes value to global and creates a local "a" variable
a = 2 // assigns to local
function a() {} // pushes value to global
a = 3 // assigns to local
console.log('0: ', a) // outputs the local varaible
}
console.log('1: ', a) // outputs the last pushed global which is 2
关于javascript - 函数声明后如何分配 JavaScript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65104172/