具名函数 与 匿名函数在对象调用的优缺点

// 简洁方法有一个非常小但是非常重要的缺点。思考下面的代码:
var Foo = { 
 bar() { /*..*/ }, 
 baz: function baz() { /*..*/ } 
};
// 去掉语法糖之后的代码如下所示:
var Foo = { 
 bar: function() { /*..*/ }, 
 baz: function baz() { /*..*/ } 
};

由 于 函 数 对 象 本 身 没 有 名 称 标 识 符, 所 以 bar() 的 缩 写 形 式

function().. )实际上会变成一个 匿名函数表达式 并赋值给 bar 属性。相比之下, 具名函
数表达式 function baz().. )会额外给 .baz 属性附加一个词法名称标识符 baz
 
 
匿名函数没有 name 标识符,这会导致:
1. 调试栈更难追踪;
2. 自我引用(递归、事件(解除)绑定,等等)更难;
3. 代码(稍微)更难理解。
var Foo = { 
 bar: function(x) { 
    if(x<10){ 
       return Foo.bar( x * 2 ); 
     } 
    return x; 
 }, 
 baz: function baz(x) { 
    if(x < 10){ 
    return baz( x * 2 ); 
     } 
    return x; 
 } 
};

 

使用 Foo.bar(x*2) 就足够了,但是在许多情况下无法使用这种方法,比如多个对 象通过代理共享函数、使用 this 绑定,等等。这种情况下最好的办法就是使用函数对象的
name 标识符来进行真正的自我引用。
使用简洁方法时一定要小心这一点。如果你需要自我引用的话,那最好使用传统的 具名函 数表达式来定义对应的函数( · baz: function baz(){..}· ),不要使用简洁方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值