热门

最新

红包

立Flag

投票

同城

我的

发布
cc18868876837
码飞_CC
6 年前
truecc18868876837

图一是ES6的简洁语法,图二是去掉语法糖之后的代码。

由于函数对象本身没有名称标识符,所以bar()的缩写形式(function()..)实际上会变成一个匿名函数表达式并赋值给bar属性。相比之下,具名函数表达式(function baz()..)会额外给.baz属性附加一个词法名称标识符baz。

匿名函数有3大主要缺点,匿名函数没有name标识符,这会导致:
1.调试栈更难追踪;
2.自我引用(递归、事件(解除)绑定,等等)更难;
3.代码(稍微)更难理解。

简洁方法没有第1和第3个缺点。
去掉语法糖的版本使用的是匿名函数表达式,通常来说并不会在追踪栈中添加name,但是简洁方法很特殊,会给对应的函数对象设置一个内部的name属性,这样理论上可以用在追踪栈中。(但是追踪的具体实现是不同的,因此无法保证可以使用。)
如果你需要自我引用的话(如递归),那最好使用传统的具名函数表达式来定义对应的函数(· baz: function baz(){..}·),不要使用简洁方法。

CSDN App 扫码分享
分享
评论
3
打赏
  • 复制链接
  • 举报
下一条:
智者不惑,勇者不惧,诚者有信,仁者无敌。。。
立即登录