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

时间:2017-02-25 12:49:03

标签: javascript



var a = function b() {

};

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




为什么两个输出有差异?

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

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

有任何解释吗?

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

  

为什么两个输出有差异?

您正在为名为b的函数获取函数表达式,并将其分配给名为a的变量。这意味着a在表达式的范围内,但b不是;它只在函数范围内。 (整个函数,包括参数列表;最后一部分仅与ES2015 +相关,而不是ES5及更早版本:您可以使用b作为默认参数的值。)

您可能希望b位于表达式所在的范围内,因为对于函数声明来说这是真的:



function b() {
}
console.log(typeof b);




但这只是处理函数声明和函数表达式的一个区别。

答案 2 :(得分:-1)

function b(){

}

您声明了一个名为b的函数。该语句具有无返回值,因此返回值未定义。

要声明匿名函数,您必须省略声明中的函数名称,如下所示:

function(){

};

这个只是一个函数 literal 你可以分配给这样的变量:

var a = function(){

};