我刚刚在一次采访中遇到过这个问题。我没有得到任何答案,所以把它放在StackOverflow
上JS中的一个简单问题但我无法理解它背后的原因。以下是代码。
var f = function foo(a, b) {
console.log(a + "-" + b); //f(1,2) will print 1-2
//foo(1,2) is undefined.
}
现在如果我做f(1,2)
那么它的效果非常好。
但是,如果我foo(1,2)
,则表示undefined function
。
为什么会这样?将函数赋值给js变量后,为什么函数不能调用函数?
答案 0 :(得分:7)
There are two ways to declare functions.
功能声明:
function f(a,b) { }
功能表达:
var f = function(a,b) { }
在函数表达式中,您还可以指定"内部"功能名称如下:
var f = function foo(a, b) { }
名称foo
只能在函数内部显示。这通常用于递归函数,以确保正确的自引用。
请参阅ECMAScript 5规范 section 13 ,了解函数声明和表达式之间的更多详细信息。
答案 1 :(得分:3)
对于命名函数表达式(这就是您所拥有的),名称foo
仅在表达式本身中可用。
MDN:如果要引用函数体内的当前函数,则需要创建一个命名函数表达式。这个名称只对函数体(范围)是本地的。