函数的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‘
时间: 2024-10-18 18:27:15

函数的name属性的相关文章

传智播客视频学习 ---->>>> 函数的形参属性

函数形参的属性: #include <iostream> // 此处的参数 int a,只是具有对外的接口, // 其他的属性跟函数体中的b具有一样的属性, // 在函数执行结束的时候就将其销毁了 int functionParameterProperty( int a ){ int b = 10; a = b; printf( "a = %d", a ); } int main (){ int a = 0; functionPatameterProperty( a );

变量声明置顶规则、函数声明及函数表达式和函数的arguments属性初始化

一.变量声明和变量赋值: if (!("a" in window)) { var a = 1; } alert(a);//a为? 你可能认为alert出来的结果是1,然后实际结果是"undefined".要了解为什么,我们需要知道JavaScript里的3个概念: 1.所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1; 可以用如下方式来检测全局变量是否声明: "变量名称" in window 2.声明

js函数的内部属性---arguments,callee,caller

在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: 代码1: function aa(b){alert(arguments);} aa(4); function aa(a,b,c,d){alert(arguments.length);} aa(1,2,3,4); function aa(a,b,c,d){alert(arguments[2]);} a

函数的caller属性

今天我在这里通过一个例子介绍一下函数自身的call属性. 例: function whoCallMe(){ alert("My caller is" + whoCallMe.caller); }; function CallerA(){whoCallMe();}; function CallerB(){whoCallMe():}; alert{whoCallMe.caller};//输出结果为:null; whoCallMe();//输出结果为:My caller is null; C

Android C语言_init函数和constructor属性及.init/.init_array节探索

本篇文章主要介绍了"Android C语言_init函数和constructor属性及.init/.init_array节探索",主要涉及到Android C语言_init函数和constructor属性及.init/.init_array节探索方面的内容,对于Android C语言_init函数和constructor属性及.init/.init_array节探索感兴趣的同学可以参考一下. 了解C语言的程序猿都知道有两种方法可以让一部分代码在so或可执行文件被加载的时候先于其它任何函

javascript——对象的概念——函数 1 (函数对象的属性和方法)

一.函数相关的属性: 1.arguments:访问函数的输入参数,由脚本解释器自动创建,具有length属性,可以用序号访问每个参数. 2.callee:arguments的属性,表正在执行的函数对象. 3.calleer:函数对象的属性,表函数对象的父函数对象.

js函数的caller属性

函数的caller属性返回的是调用当前函数的上层函数,caller的初始值是null.当函数没有被其他函数调用时caller的值为null. function b(){ function c(){ console.log(c.caller); } c(); } b(); 结果: function b(){ function c(){ console.log(c.caller); } c(); }

python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变

Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用.写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring.废话不多说,上俩栗子就能搞明白! 实例一: 不加wraps # -*- coding=utf-8 -*- from functools imp

证明函数是对象的特殊子类型和函数的对象属性

你不知道的Javascript的作者中认为, 数组和函数是对象的特殊子类型 作者的理由是使用typeof去检查的时候, 这两种数据类型返回来的值 都是Object 作者认为是对象的特殊子类型 但是我觉得使用type去检查引用类型,得到的结果是不准确的. /* 作者还给出了一个观点 函数值对象的特殊子集 我觉得这是ok的 下面的代码 就可以证明 */ function say() { console.log("我饿了") } say.sa = "哈哈" console