为什么在赋值给变量后函数名称不可用

Par*_*ram 6 javascript

我刚在一次采访中遇到过这个问题.我没有得到任何答案,所以把它放在StackOverflow上

JS中的一个简单问题,但我无法理解它背后的原因.下面是代码.

var f = function foo(a, b) {
    console.log(a + "-" + b); //f(1,2) will print 1-2
    //foo(1,2) is undefined.
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做,f(1,2)它完全正常.

但如果我这样做,foo(1,2)那就说undefined function.

为什么会这样?将函数赋值给js变量后,为什么无法使用函数名调用函数?

Dmy*_*nko 7

声明函数有两种方法.

功能声明:

function f(a,b) { }
Run Code Online (Sandbox Code Playgroud)

功能表达:

var f = function(a,b) { }
Run Code Online (Sandbox Code Playgroud)

在函数表达式中,您还可以指定"内部"函数名称,如下所示:

var f = function foo(a, b) { }
Run Code Online (Sandbox Code Playgroud)

该名称foo仅在函数内部可见.这通常用于递归函数以确保正确的自引用.

有关函数声明和表达式之间的更多详细差异,请参阅ECMAScript 5规范第13节.