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那么它们为什么有相同的名称属性值呢?