图一是ES6的简洁语法,图二是去掉语法糖之后的代码。由于函数对象本身没有名称标识符,所以bar()的缩写形式(function()..)实际上会变成一个匿名函数表达式并赋值给bar属性。相比之下,具名函数表达式(function baz()..)会额外给.baz属性附加一个词法名称标识符baz。匿名函数有3大主要缺点,匿名函数没有name标识符,这会导致:1.调试栈更难追踪;2.自我引用(递归、事件(解除)绑定,等等)更难;3.代码(稍微)更难理解。简洁方法没有第1和第3个缺点。去掉语法糖的版本使用的是匿名函数表达式,通常来说并不会在追踪栈中添加name,但是简洁方法很特殊,会给对应的函数对象设置一个内部的name属性,这样理论上可以用在追踪栈中。(但是追踪的具体实现是不同的,因此无法保证可以使用。)如果你需要自我引用的话(如递归),那最好使用传统的具名函数表达式来定义对应的函数(· baz: function baz(){..}·),不要使用简洁方法。