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
使用理念:小范围使用,传参可以多用