Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 命名匿名函数与匿名函数_Javascript_Function_Anonymous Function - Fatal编程技术网

Javascript 命名匿名函数与匿名函数

Javascript 命名匿名函数与匿名函数,javascript,function,anonymous-function,Javascript,Function,Anonymous Function,因此,我对何时使用匿名函数感到困惑,例如: let foo = function () { //code } let foo = function foo () { //code } 与命名的匿名函数相比,例如: let foo = function () { //code } let foo = function foo () { //code } 除了浏览器支持,即IE,两者之间还有什么区别吗?什么时候应该使用一个而不是另一个?在这种情况下,如果函数声明名称与其所分配

因此,我对何时使用匿名函数感到困惑,例如:

let foo = function () {
  //code
}
let foo = function foo () {
  //code
}
与命名的匿名函数相比,例如:

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

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

在这种情况下,如果函数声明名称与其所分配的变量相同,则没有多大区别

如果定义和赋值使用了不同的名称,则在命名函数时,右边的名称优先:

foo = function bar() {}
foo.name  // "bar"
在这两种情况下,您都会将函数指定给变量(函数表达式),但在第一种情况下,您会指定一个未命名/匿名函数,而在第二种情况下,您会指定一个命名函数。当在这样一个简单的表达式中将匿名函数分配给变量时,JS引擎能够正确地命名该函数

考虑以下情况,其中此分配对于发动机不明显:

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

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

它们都不是匿名的。在这两种情况下,
foo.name
都是
foo
在函数中使用名称自引用它,因为您不能使用
参数。在
使用strict
中被调用方
第二个函数不是匿名的,因为您只给了它一个名称。@gurvinder372第一个函数是匿名的,并分配给了一个变量。第二个也是赋值的,但它的名称是。@HubertGrzeskowiak那么它们为什么有相同的名称属性值呢?