命名匿名函数与匿名函数

时间:2018-01-30 06:48:29

标签: javascript function anonymous-function

所以我很困惑何时会使用匿名函数,例如:

let foo = function () {
  //code
}

与命名的匿名函数相比,例如:

let foo = function foo () {
  //code
}

除了浏览器支持,即IE,两者之间有什么区别吗?我何时应该使用另一个?

1 个答案:

答案 0 :(得分:2)

在这种情况下,函数声明名称与赋值的变量相同,它没有太大的区别。

如果您为定义和赋值使用了不同的名称,则右侧的名称优先于命名函数:

foo = function bar() {}
foo.name  // "bar"

在这两种情况下,您都将函数分配给变量(函数表达式),但在第一种情况下,您指定了一个未命名/匿名函数,而在第二种情况下,您指定了一个命名函数。在这样一个简单的表达式中为一个变量赋予一个匿名函数时,JS引擎能够正确地命名该函数。

考虑以下情况:此分配对于引擎来说不明显:

function p(fun) { return fun; }
foo = p(function() {})
foo.name  // empty string

TL; DR;使用命名函数,您通常可以获得更好的堆栈跟踪。