普通函数的this指向与箭头函数的this指向
普通函数:
function fun(){
console.log("定义普通函数的方式");
}
前言:
普通函数的this是指向调用者的。
也就是哪一个对象调用普通函数,普通函数就指向哪一个对象。
var name="window"
let obj={
name:"obj",
fun:function(){
console.log("当前this的指向=>",this.name);
}
}
obj.fun();
因为普通函数是谁调用,就指向谁。所以指向的应该是obj。
var name="window"
let obj={
name:"obj",
fun:function(){
console.log("当前this的指向=>",this.name);
}
}
let a=obj.fun;
a();
现在是指向的就是window。
箭头函数:
前言:
箭头函数是继承于存在的作用域的this的。
var name="window";
let obj={
name:"obj",
fun1:function(){
console.log("当前作用域的this指向=>",this.name);
(()=>{
console.log("当前箭头函数的this指向=>",this.name);
})()
}
}
obj.fun1();
fun1函数是普通函数,谁指向它,它的this就指向谁,所以fun1函数指向obj,箭头函数在fun1函数中,存在的作用域也指向obj,所以箭头函数继承了作用域的this。箭头函数的this也是obj。
再看另一个例子:
var name="window";
let obj={
name:"obj",
fun1:function(){
console.log("当前作用域的this指向=>",this.name);
(()=>{
console.log("当前箭头函数的this指向=>",this.name);
})()
}
}
let a=obj.fun1;
a();
这样子fun1指向的是window,箭头函数的this也是指向window,因为箭头函数存在的作用域指向的是window。