var b = 10;
(function b() {
b = 20;
console.log(b)
})()
输出结果:
ƒ b() {
b = 20;
console.log(b)
}
原因:
我的理解是,先不看函数自执行,直接fn b()
首先函数声明比变量要高,其次b = 20 没有var 获取其他,说明是window最外层定义的变量。
js作用域中,先找最近的 那就是b fn ,直接打印了,如果 b = 20 有var 那就是打印20
作用域:执行上下文中包含作用域链:
在理解作用域链之前,先介绍一下作用域,作用域可以理解为执行上下文中声明的变量和作用的范围;包括块级作用域/函数作用域;
特性:声明提前
:一个声明在函数体内都是可见的,函数声明优先于变量声明;
在非匿名自执行函数中,函数变量为只读状态无法修改;