NFE(具名函数表达式)的问题

群里小伙伴讨论了这么一个问题:

1
2
3
4
5
const a = function b() {
b = 1;
console.log(b);
};
a(); //打印b为function(){b=1;console.log(b);}

为什么这里打印的 bb 函数,而不是 1

声明提前:一个声明在函数体内都是可见的,函数声明优先于变量声明;函数表达式 如果有 name 的话,这个 name不可删除且为只读

资料查阅:

  • 函数(Functions)
  • 作用域链(Scope Chain)
  • 变量对象(Variable object)
  • 执行上下文(Execution Context)