ES6箭头函数的this指向(适合小白理解)

ES6箭头函数的this指向(适合小白理解)


1.箭头函数适用的场景

作为一个值存在:

var fn = ()=>{
  console.log("HELLO")
}
fn()	//HELLO

作为事件存在:

document.onclick = ()=>{
   console.log(1)
};		//1

作为参数存在:

setTimeout(() => {
    console.log("1秒之后了")
}, 1000);	//1秒之后了

2.箭头函数的参数和返回值
给箭头函数传参

var fn = (a)=>{
    console.log(a)		//hello
}
fn("hello")

返回值一个值

var fn = ()=>{
    return "world"
}
console.log(fn())	//world

可以简写

varsayHello = a=>"hello "+a;
console.log(fn("admin"))	//hello admin

3.箭头函数this的指向
this:表示这个,函数执行上下文
箭头函数自动·绑定外层函数的this
当多个箭头函数嵌套时,它们会逐层向上寻找离它最近的函数,若没找到,则this指向全局,即window
直接写一个箭头函数,外层没有或者说外层是window,所以直接指向window

var fn = ()=>{
    console.log(this)
}
fn()     //window

箭头函数自动绑定外层this,而show中的箭头函数外层没有函数,所以就是全局的window

var obj = {
    name:"obj",
    show:()=>{
        console.log(this)
    }
}
obj.show()  //window

箭头函数自动绑定外层this,离箭头函数最近的函数是show中的function,而function中的this是指向obj的,所以此时箭头函数中的this指向obj

var obj = {
    name:"obj",
    show:function(){
        setTimeout(() => {
            console.log(this)
        }, 1000);
    }
}
obj.show()      //obj

此时是两个箭头函数嵌套,它们依次向外寻找离他最近的函数,而它们外层没有函数包裹,所以指向window

var obj = {
    name:"obj",
    show:()=>{
        setTimeout(() => {
            console.log(this)
        }, 1000);
    }
}
obj.show()      //window

缺点:1.伤害代码的可读性,语义化不好
2.不能被new
3.不方便返回对象,当要返回对象时必须呀加()。eg:var fn = a => ({“aa”:“11”,“bb”:“22”})
优点:简洁
自动绑定外层函数的this
使用理念:小范围使用,传参可以多用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值