《JavaScript 核心原理解析》学习笔记 Day 4 声明语句与对象中函数 function 的名称 name

文章详细阐述了JavaScript中匿名函数和具名函数的区别,以及在不同声明方式下函数的name属性如何体现。通过示例代码展示了函数声明、变量赋值和对象属性中的函数命名规则,包括函数表达式的name属性和实际访问名称的差异。

        在 JavaScript 中,有具名函数匿名函数之分,匿名函数即其name属性为空字符串。根据声明语句的不同,函数名称也会有不同表现。具体见如下代码:

// 直接写一个匿名函数语句会报错
function(){} // Uncaught SyntaxError: Function statements require a function name
// 声明一个具名函数
function f1(){}
f1.name // f1
// 通过 var 使用变量声明函数时
// 若声明语句右侧函数表达式中的函数为匿名函数,则最终声明的可访问函数 f2 的名称 name 为左侧的声明的变量名 f2
var f2=function(){}
// 或 var f2=()=>{}
f2.name // f2
// 若声明语句右侧函数表达式中的函数为具名函数,则最终声明的可访问函数 f3 的名称 name 为右侧具名函数的函数名 f4
// 并且无法通过右侧的函数名 f4 访问最终声明的函数 f3
var f3=function f4(){}
f3.name // f4
f4 // Uncaught ReferenceError: f4 is not defined

        而作为一个对象中的函数属性时,函数的名称又有不同表现。具体见如下代码:

// 在对象生成时通过字面量添加的函数属性,其名称表现基本同声明语句
// 在函数属性值为匿名函数表达式时,会把属性名做为函数的名称 name
var obj={
    f1(){},
    f2: function(){},
    f3: ()=>{},
    f4: function f5(){},
}
obj.f1.name // f1
obj.f2.name // f2
obj.f3.name // f3
obj.f4.name // f5
// 但之后通过 obj 访问对象添加函数属性时,其函数的名称完全由右侧的函数表达式决定
// 在函数属性值为匿名函数表达式时,不会把属性名作为函数的名称 name
obj.f6=function(){}
obj.f7=()=>{}
obj.f8=function f9(){}
obj.f6.name // ''
obj.f7.name // ''
obj.f7.name // 'f9'

----- 极客时间《JavaScript 核心原理解析》学习笔记 Day 4 ----- 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值