为什么console.log(b)的出输结果是2呢? 在AO对象里函数表达式赋值优先级不是最高吗? 不应该是 function b () { }?

你这个截图不理解你说的,你这儿三个console.log,第一个是1,就是传进来的 a值,第二个是b,就是第6行的b=2,最后一个还是2,因为b的值没有改变
- 创建 test 函数
- 执行 test(1)
- test 执行
- 1 创建变量 a = 1, b= undefined【此时b=undefined】(此处是形参传入的处理)
- 2 声明函数 function b(){} 和 函数 function d(){}【此时b=函数】
- 3 c变量申明提前 c= undefined
- 4 console.log(a) 输出a, a=1
- 5 给变量 c赋值;c=0
- 6 给变量 a赋值;a=3
- 7 给变量 b赋值;b=2【此时b=2 】
- 8 console.log(b) 输出b, b=2
- 9 函数最先声明,所以此处不会再执行函数的申明
- 10 console.log(b) 输出b, b=2
注意:3.1这里是形参的处理,并不是函数内部的变量申明提前!
function 申明最先执行,然后是var的变量提升,这个题的顺序和输出你就不会错了!
仅个人理解,有错请纠正!