首页 > 代码库 > 函数的name属性
函数的name属性
6月1日开始,回到学校准备毕业设计的答辩工作,刚回来的几天主要是修改论文,为论文查重做准备,偶尔会有小范围的聚会。接着,准备代码验收与论文答辩,中间还穿插着有拍毕业照,准备毕业档案材料以及团体聚会等一系列事情。虽说不像上班那么疲惫,但是每天安排的都很紧凑,没怎么闲着。终于这一切都完事了,就等着最后领毕业证了,也终于有空规划一下自己了。
仔细想了一下,我发现实习的这段时间,自己的知识面有所扩展,也自己看了一些技术方面的书,但是没有写过什么总结,大半年下来,博客和github几乎没有更新。所以在接下来的这段时间要给自己立一个flag,每天要学一些新技术,并将自己看过的一些内容进行梳理,以博客总结的形式展示出来。
今天重新翻开《JavaScript忍者秘籍》看到自己之前看的时候画的各种彩色圈圈、直线、波浪线,想起了刚开始看的时候,看不懂的地方就发呆,然后用笔画圈圈。现在再开起来就没那么费劲了,而且还能边看边思考。
在《JavaScript忍者秘籍》的第三章中有这么一段话:“所有的函数都有一个name属性,改属性保存的是该函数名称的字符串。没有名称的函数也仍然有name属性,只是该属性值为空字符串。”
于是就有如下3种情况:
第1种情况:
function isNimble(){return false;} console.log(isNimble.name);//isNimble
第2种情况:
var canFly = function(){return true;} console.log(canFly.name);//按照书中说的应该输出‘‘,实际输出的为canFly
第3种情况:
var wieldsSword = function swingsSword(){return true;} console.log(wieldsSword.name);//swingSword
问题就出在第二种情况:
《JavaScript忍者秘籍》中表示创建一个匿名函数,并赋值给一个变量,这种情况该函数的name属性值应该为"",而不是变量的名字。
于是google了一下,原来:
ES6对函数的name属性进行了修改,如果将一个匿名函数赋值给一个变量,ES5的name属性会返回空字符串,而ES6的name属性会返回实际的函数名。
另外对于Funtion构造函数返回的函数实例,name属性的值为"anonymous"
//对于Funtion构造函数返回的函数实例 console.log((new Funtion).name);//‘anonymous‘
对于bind返回的函数,name属性值会加上‘bound‘前缀:
//对于bind返回的函数 function foo(){}; foo.bind({}).name //‘bound foo‘ (function(){}).bind({}).name //‘bound‘
函数的name属性