function a() {}是函数声明,在fn的作用域内会被优先读取,然后才执行代码,此时第一个console.log是打印函数 a 而不是传进来的变量 a,至于为什么fn(a)里的a没被标记未使用是因为js没有类型检查。不然这个会报错。
所以是 函数内对a的声明覆盖了形参a的值, 然后函数a又覆盖了a的undefined, 进行第一个输出后a被赋值666, 之后输出第二和第三,最后输出函数b 吗?(这样理解对不对
差不多。不能说是覆盖,就是这个{}内包括根中的所有var/function都会被执行前提升到文件头部先定义,然后再按顺序