【问题标题】:why function name will not be available after assignment to a variable [duplicate]为什么分配给变量后函数名称不可用[重复]
【发布时间】:2015-12-26 19:56:41
【问题描述】:

我刚刚在一次采访中遇到了这个问题。我没有得到任何答案,所以把它放在 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变量后,不能用函数名调用函数?

【问题讨论】:

  • 请考虑将其中一个答案标记为已接受。

标签: javascript


【解决方案1】:

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,了解函数声明和表达式之间更详细的区别。

【讨论】:

    【解决方案2】:

    对于一个命名函数表达式(这就是你所拥有的),名称foo 仅在表达式本身中可用。

    MDN:如果要在函数体内引用当前函数,则需要创建一个命名函数表达式。该名称仅对函数体(作用域)是本地的。

    【讨论】:

    • 是的。仅当我们将其分配给某个变量时,名称之间的名称才会是函数体的局部变量,不是吗?
    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2014-12-05
    • 2014-08-26
    • 2018-07-10
    相关资源
    最近更新 更多