函数语句与函数表达式奇怪的行为

Rah*_*ora 2 javascript

var a = function b() {

};

console.log(typeof b); //gives undefined
console.log(typeof a); //gives function
Run Code Online (Sandbox Code Playgroud)

为什么两个输出的差异?

我理解函数表达式和函数语句之间的区别,但不能理解上面的输出.

据我所知,javascript var a指向分配给命名函数b的内存.在这种情况下typeof b也应该返回,function但它返回undefined

有什么解释吗?

Nin*_*olz 6

因为命名函数表达式的名称作用于表达式.

var a = function b() {
    console.log(typeof b); //gives function
    console.log(typeof a); //gives function
};

console.log(typeof b); //gives undefined
console.log(typeof a); //gives function

a();
Run Code Online (Sandbox Code Playgroud)

  • 为 100% 精确,涉及两个范围。第一个是整个函数表达式的作用域;第二个是大括号之间的那个。名称的范围是前者。换句话说,以下是有效的,如果没有用:`a = function b(arg = b) { };`。 (2认同)