前言:回顾this指向
- 谁调用的函数this就指向谁
- 直接调用函数函数相当于window调用,所以this指向window
- 通过new调用函数,this指向创建的新对象
- 通过apply call bind调用this指向传入的参数
- 如果是dom事件函数,this指向事件源
箭头函数是一个 函 数 表 达 式 \color{#f40}{函数表达式} 函数表达式
理论上任何函数表达式的场景都可以使用箭头函数
(参数)=>{
内容处理
}
//简写
// 如果只有一个参数可以省略括号
参数=>{
内容处理
}
// 如果只有一条语句返回可以大括号和return
参数=> 内容处理
简写箭头函数
如果箭头函数执行体只有一句并且有返回
(a, b, c) => {
return c = a + b
}
// 简写
(a, b, c) => c = a + b
// 如果要返回对象
(a, b, c) => {
return{
a:a,
b:b,
c:a+b
}
}
//简写 (用一个小括号)
(a, b, c) =>({
a:a,
b:b,
c:a+b
})
注意细节
- 箭头函数的函数体中的this,取决于箭头函数定义的位置的this指向,而与任何调用无关了
例如:
const obj = {
count:0,
start:function(){
//这里this指向obj (obj调用的这个函数谁调用指向谁)
setInterval(function(){
// 这里this指向 window 这里setInterval相当于是window调用
this.count++
console.log(this.count) //打印 undefined
// undefined ++ => NAN
console.log(this.count++) //打印 NAN
},10000)
}
}
obj.start()
//使用箭头函数解决*************************************************//
const obj = {
count:0,
start:function(){
//这里this指向obj (obj调用的这个函数谁调用指向谁)
setInterval(()=>{
//箭头函数的函数体中的this,取决于箭头函数定义的位置的this指向,而与任何调用无关了 相当于:setInterval(this,10000)这里的this相当于 obj
this.count++
console.log(this.count) //打印 count
// undefined ++ => NAN
console.log(this.count++) //打印 count
},10000)
}
}
obj.start()
//下面这种使用箭头函数this是window,一般不这样写也没有这样的需求
//this不在函数里面都是指向widow
const obj = {
count:0,
start:()=>{
// 这里的this是window
}
}
obj.start()
//将上面的简化,好理解
const obj1 = {
count:0,
start:this
}
console.log(obj1.start) //打印 window
- 箭头函数中,不存在this、argument、new.target,如果使用了则使用的是函数外层对应的this、argument、new.target(相当于箭头函数定义的位置的this指向)
- 箭头函数没有原型(但是有隐式原型,这个是所有函数都有的)
- 箭头函数是不能用来当作构造函数
应用场景
- 临时性使用函数,例如
- 事件处理函数
- 异步处理函数
- 其他临时性函数
- 为了绑定外出this的函数
- 在不影响代码的情况下,为了然代码更简洁更加易读,也使用箭头函数