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

为什么两个输出有差异?
我理解函数表达式和函数语句之间的区别,但不能理解上面的输出。
据我所知,javascript使var a
指向分配给命名函数b的内存。在这种情况下,typeof b
也应返回function
,但会返回undefined
有任何解释吗?
答案 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(){
};