V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
lisisi
V2EX  ›  JavaScript

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

  •  
  •   lisisi · 2020-05-08 09:49:49 +08:00 via Android · 3583 次点击
    这是一个创建于 1667 天前的主题,其中的信息可能已经有所发展或是发生改变。
    12 条回复    2020-05-09 18:13:11 +08:00
    silaike
        1
    silaike  
       2020-05-08 09:53:50 +08:00 via iPhone
    报错的时候有区别,前者能追踪到函数名称
    rabbbit
        2
    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
        3
    xiaoriri666  
       2020-05-08 10:04:03 +08:00
    闭包
    l1nyanm1ng
        4
    l1nyanm1ng  
       2020-05-08 10:18:24 +08:00
    var a = function factorial(n) { return n <= 1 ? 1 : n * factorial(n - 1) };

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

    与这个函数名问题有点关系
    libook
        12
    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”出了错。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.