我正在读一本很棒的书,名为《JavaScript Ninja 的秘密》,作者是 John Resig 和 Bear Bibeaoult。 3.2章中给出了一个例子;
var canFly = function(){ return true; };
然后它说;
创建一个匿名函数并将其分配给名为 canFly 的全局变量。由于 JavaScript 的函数性质,可以通过此引用调用该函数,如 canFly()。在这方面,它在功能上几乎等同于声明一个名为“canFly”的命名函数,但又不完全一样。一个主要区别是函数的名称属性是“”,而不是“canFly”。
但是当我尝试在 Chrome 的开发人员工具上执行示例并检查name
的财产canFly
函数时,它返回值“canFly”而不是空字符串。
canFly.name;
// > "canFly"
早期分配给变量的匿名函数没有名字吗?如果是这样,发生了什么变化?还是作者犯了错误?
理论上匿名函数是匿名的,意思是无名的。这就是它最初的实施方式,十多年来,每个人都对此表示满意。
然后发生了两件事:整个 Web2.0/ajax 运动,人们开始在网页和 Node.js 中实现桌面应用程序中常见的 UI 功能。这两者的结合迫使越来越多的开发人员将 javascript 视为一种严肃的语言,一旦人们熟悉了 javascript,他们就开始编写非常大的代码库。
这导致了人们对 javascript 的可调试性的抱怨。从没有任何有用的调试器(这导致我们在浏览器中拥有非常好的调试器,在我看来,仅次于 MS Visual Studio)到不知道 console.log 来自什么函数(因为它们是匿名的),有很多问题。 。
这导致浏览器和 js 引擎开发人员实现试图猜测无名函数“名称”的代码。
从理论上讲,此功能是错误的,因为您不能总是保证您猜测的名称就是函数的调用方式(例如,如果函数被分配给多个不同的变量)。在实践中,90% 的情况下都有效的东西总比什么都没有好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)