先看代码段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