代码之家  ›  专栏  ›  技术社区  ›  Yusuf Yalim

为什么javascript中的匿名函数有名字?

  •  8
  • Yusuf Yalim  · 技术社区  · 7 年前

    var canFly = function(){ return true; };
    

    创建一个匿名函数,并将其分配给名为canFly的全局变量。由于JavaScript的功能性质,可以通过此引用调用函数canFly()。在这方面,它在功能上几乎等同于声明一个名为“canFly”的命名函数,但并不完全等同。 一个主要区别是函数的name属性是“”,而不是“canFly”。

    但是当我尝试在Chrome的开发者工具上执行这个例子并检查 name 的属性 canFly

    canFly.name;
    // > "canFly"
    

    2 回复  |  直到 7 年前
        1
  •  3
  •   slebetman    7 年前

    理论上,匿名函数是匿名的,意思是匿名。这就是它最初的实现方式,十多年来,每个人都对此感到满意。

    然后发生了两件事:整个Web2.0/ajax运动,人们开始在web页面和node.js中实现桌面应用程序中常见的UI功能。这两者的结合迫使越来越多的开发人员将javascript视为一种严肃的语言,一旦人们熟悉javascript,他们就开始编写非常大的代码库。

    理论上,这个特性是错误的,因为您不能总是保证您猜测的名称是如何调用函数的(例如,如果函数被分配给几个不同的变量)。实际上,在90%的时间里有效的东西总比什么都没有好。

        2
  •  2
  •   Álvaro González    7 年前

    .name 可能只是想尽力提供帮助:

    var canFly = function () {};
    var areYouSure = function yesIAm(){};
    console.log(canFly.name);
    console.log(areYouSure.name);
    console.log((function (){}).name);

    查看详细信息 MDN

    这个 function.name 属性返回函数的名称。

    …进入ES2015年(emphasis mine):

    变量和方法可以 推断

    因此,它返回名称,但当无法返回时,它会尝试猜测。