先看代码段1:
x = 123
function a() {
console.log(x)
}
function b() {
x = 456
a()
}
b()
- 问这个时候会console出什么?
答案是456,因为x是全局变量,在b执行时,先将全局变量x重新赋值为了456, 而b内a执行时,a内没有x这个变量,也没有在入参中找到x,所以就会到window 下寻找x,找到的x值为456
再看代码段2:
var x = 123
function a() {
console.log(x)
}
function b() {
var x = 456
a()
}
b()
- 问这个时候会console出什么?
答案是123,因为window下有x,且x值为123
b方法内是x赋值456,这个x是b方法内部的局部变量
函数执行
函数执行时,首先会寻找函数内部的变量以及入参,如果都没有会直接向window下寻找 全局变量,如果都没有会返回undefined