首先来复习一下 JS 里几种声明的方法
在大部分语言中都存在的标准声明方法:
function func() {
...
}
函数表达式(Function Expression):
let func = function() {
...
}; // 别漏了分号
箭头函数:
let func = () => {
...
};
其中 2 和 3 都是在执行到时才可用,只有第一种可以在其声明位置之前使用。
箭头函数没 this
,此外也没有 arguments
,也不可用 new 来 call 它。而且也没有 super
。
let user = {
firstName: "Ilya",
sayHi: () => alert(this.firstName),
};
user.sayHi(); // undefined
上面写在 Object 里面,这里 this 会指向 Window。
感觉 2 和 3 是一样的,实际上 2 是有 this 的。
let user = {
firstName: "Ilya",
sayHi: function () { alert(this.firstName) },
};
user.sayHi(); // Ilya
如果使用 const
声明,相比标准方法可以保证函数名下的函数不被替换。
如果想使用传统的在声明之前就可以使用的函数,那只能选择第一种。
如果觉得箭头函数更加好看,那就用它吧,但注意处理好 this,对于在 object 中的箭头函数,给他包上一层 function 吧,或者干脆使用普通的函数表达式。
如果要用 TS 的话推荐使用箭头函数,这样可以把 Props 和返回值的类型写在一起,type 的定义也会方便一些,详见 React + TypeScript。
Ref: