下面有几种不同的情况,请问下各自对应的输出信息是什么?
尤其是第一个问题,是不是函数b的嵌套的函数a捕获了变量a的原因,以至于输出的信息为 123 的.有大神能帮忙分析一下吗?这个涉及变量提升和闭包的知识点.
1.
let a = 123
function b() {
a = 456
function a() {
a = 789
}
}
b()
console.log(a)
2.
let a = 123
function b() {
a = 456
}
b()
console.log(a)
3.
let a = 123
function b() {
var a = 456
function a() {
a = 789
}
}
b()
console.log(a)
4.
let a = 123
function b() {
a = 456
function a() {
var a = 789
}
}
b()
console.log(a)
第一问:b函数中的function a()是声明了一个函数
第二问:按顺序执行,输出456
第三问:和第一问道理是一样的,改变的只是函数b内部的a变量,不会影响外部
第四问:和第一问一样,b内部的a函数只是声明,并没有执行,所以里面的var a = 789自然也没影响