如果对于eslint的那些规范只知其然,不知其所以然。 那么 airbnb 的规范还是值得一读的。 https://github.com/lin-123/eslint-config-airbnb-ch
举个栗子
函数声明式作用域被提前了,这意味着在一个文件里函数很容易(太容易了)在其定义之前被引用。这样伤害了代码可读性和可维护性。如果你发现一个函数有大又复杂,这个函数妨碍这个文件其他部分的理解性,这可能就是时候把这个函数单独抽成一个模块了。别忘了给表达式命名——匿名函数会在错误调用栈里难以定位
// bad
function foo() {
// ...
}
// bad
const foo = function () {
// ...
};
// good, 函数表达式也需要命名
const foo = function bar() {
// ...
};
解析
命名函数表达式有两点好处
- 函数声明式作用域被提前了, 这一点大家很清楚,就不多说了。
- 匿名函数会在错误调用栈里难以定位, 对于这一点为什么会有这个问题呢?
请看下面这个栗子:
- bad, 这种情况下我们就很难通过调用栈定位foo到底调用了哪一个匿名函数
let foo = function () {
console.log('hello foo');
}
// todo somthing
// ...
foo = function () {
console.log('also foo');
}
foo()
匿名函数表达式
- good。 而这种写法在调用栈里就会很明确是调用了 bar 还是 baz
let foo = function bar() {
console.log('hello foo');
}
// todo somthing
// ...
foo = function baz() {
console.log('also foo');
}
foo()
命名函数表达式
网友评论