看一些框架的源码(非压缩)的时候,偶尔会看到他们会给函数表达式添加函数名。
比如以下代码:
// 不给函数表达式添加函数名看起来会更简洁
setTimeout(function () {
console.log('foo');
}, 1000);
// 添加函数名
setTimeout(function foo() {
console.log('foo');
}, 1000);
事实上,给函数表达式添加函数名是一种最佳实践,有下面几点理由:
1、如果代码出错,有函数名可以快速定位错误位置,否则匿名函数在栈追踪
中不会显示出有意义的函数名,调试困难。
2、没有函数名,函数想引用自身需要依靠已经废弃的arguments.callee
。有一个经典的例子是,使用removeEventListener()
需要解绑事件函数,也就是自身。
3、函数名能提高代码的可读性可理解性,一堆匿名函数会让代码变得混乱。