匿名函数 function anonymous( ) 和直接写 function() 有区别吗?

2020-05-08 09:49:49 +08:00
 lisisi
3466 次点击
所在节点    JavaScript
12 条回复
silaike
2020-05-08 09:53:50 +08:00
报错的时候有区别,前者能追踪到函数名称
rabbbit
2020-05-08 09:59:50 +08:00
var a = function a() {
console.log(a)
}
var b = a
a = 1
b() // ƒ a()

------------------

var a = function() {
console.log(a)
}
var b = a
a = 1
b() // 1

不过一般没人这么写,也就面试可能会考.
xiaoriri666
2020-05-08 10:04:03 +08:00
闭包
l1nyanm1ng
2020-05-08 10:18:24 +08:00
var a = function factorial(n) { return n <= 1 ? 1 : n * factorial(n - 1) };

为匿名函数命名,可以在这个函数内部递归调用自身提供一个访问的方式
zhw2590582
2020-05-08 11:08:17 +08:00
每次写到匿名函数,eslint 都会警告不要匿名,但有不想起名字,就用箭头函数代替了
noe132
2020-05-08 11:43:30 +08:00
> (function anonymous(){}).name
< "anonymous"
> (function (){}).name
> ""
DOLLOR
2020-05-08 12:06:43 +08:00
可以引用自己实现递归调用,并且不会把函数名暴露给当前作用域。
julyclyde
2020-05-08 12:08:59 +08:00
后者很正经,但是很不 javascript 风
CodingNaux
2020-05-08 12:22:35 +08:00
为啥会有这种问题....
azcvcza
2020-05-08 13:45:22 +08:00
具名函数可以在函数里进行递归调用;具名函数可以在函数栈报错时显示名字 恩不是 at anonymours (xxx.js 53)
来自 You don't know js
lizz666
2020-05-08 16:22:23 +08:00
https://github.com/lizhongzhen11/lizz-blog/issues/82

与这个函数名问题有点关系
libook
2020-05-09 18:13:11 +08:00
有个问题,function anonymous( ) 是不是就不算匿名函数了。。。


> (function(){haha})()
Uncaught ReferenceError: haha is not defined
at repl:1:13
> (function a(){haha})()
Uncaught ReferenceError: haha is not defined
at a (repl:1:15)
> (a=function(){haha})()
Uncaught ReferenceError: haha is not defined
at a (repl:1:15)


注意看错误提示的内容是不一样的,后面两个会告诉你是“函数 a”出了错。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669534

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX