使用命名函数表达式有什么意义?

Use*_*159 4 javascript function-expression

我正在浏览这篇关于函数声明和函数表达式之间差异的博客.

它给出了这两个例子.他们将第一个称为"匿名函数表达式",将第二个称为"命名函数表达式".

// anonymous function expression
var a = function(){
   return 3;
}

// named function expression
var b = function bar(){
   return 3;
}
Run Code Online (Sandbox Code Playgroud)

我在Chrome的JS控制台中测试了这两个,我看到以下内容:

a()
=> 3

b()
=> 3

bar()
=> bar is not defined
Run Code Online (Sandbox Code Playgroud)

我的问题是:在第二个函数表达式声明中,"bar"的重点是什么?一般来说,为什么要使用命名函数表达式?

tad*_*man 7

有些人喜欢这样做,因为如果发生错误,你的函数就会有名字.这主要是一个偏好问题,以及你经常使用未命名函数的问题.

您通常不会在var声明中看到它,而是在声明回调时:

callbackFunction(function success() { ... }, function fail() { ... })
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以知道哪个参数是哪个,它们被标记,如果其中一个参数失败,您就可以准确地指出哪一个破坏了.

  • 另一个原因是递归调用函数. (3认同)
  • +1.`a.name ===""&& b.name ==="bar"`. (2认同)

Ber*_*rgi 6

var b = function bar(){
   return 3;
}
bar()
=> bar is not defined
Run Code Online (Sandbox Code Playgroud)

标识符bar在函数内部可用.尝试

var b = function bar() {
    console.log(bar);
}
b();
Run Code Online (Sandbox Code Playgroud)

为什么有人使用命名函数表达式?

允许引用未分配给可达或常量变量的函数表达式,例如,用于IEFE中的递归.

此外,命名函数在调试期间显示不同,例如在调用堆栈(跟踪)或断点列表中.通常,您可以使用(命名)函数声明而不是函数表达式,另请参阅http://blog.niftysnippets.org/2010/03/anonymouses-anonymous.html.