关于javascript:this箭头函数

一般函数

一般函数的this,由动静作用域决定,指向它的间接调用者,没有间接调用者对立指向window

1、状况一

function outFun() {
    console.log(this);
}
outFun(); // this指向window

// outFun()没有间接调用者
// this指向window

2、状况二

var obj = {
  outFun: function() {
    console.log(this);
  }
};
obj.outFun(); // this指向obj

var og = obj.outFun;
og(); // this指向window

// obj.outFun()的间接调用者是obj,所以this指向obj
// 把obj.outFun赋值给og,og()等同于间接执行outFun,此时没有间接调用者

3、状况三

var obj = {
  outFun: function () {
    function inFun () {
      console.log(this)
    };
    inFun ();
  }
};
obj.outFun(); // this指向window

// inFun执行时没有间接调用者
// 当没有间接调用者的时候
// this指向window

箭头函数

箭头函数没有本人的this,箭头函数里的this就是内部作用域里this

1、状况一

var outFun = () => {
  console.log(this);
};
outFun(); // this指向window

// 箭头函数的内部作用域就是全局作用域
// 全局作用域里的this指向的就是window(严格模式下,指向的是undefined)

2、状况二

var obj = {
  outFun: () => {
    console.log(this);
  }
};
obj.outFun(); // this指向window
var og = obj.outFun;
og(); // this指向window

// 箭头函数是对象obj里的一个属性
// 其内部作用域也是全局作用域
// this同样指向window

3、状况三

var obj = {
  outFun: function () {
    var inFun = () => {
      console.log(this);
    };
    inFun();
  }
};
obj.outFun(); // this指向的obj
var og = obj.outFun;
og(); // this指向window

// 箭头函数inFun的内部作用域是outFun
// 箭头函数里的this和内部作用域的this指向统一
// 然而outFun是个一般函数,一般函数的this指向的是其间接调用者
// 没有间接调用者时,指向window

4、状况四

var obj = {
  inObj: {
    outFun: () => {
      console.log(this)
    }
  }
}

obj.inObj.outFun() // this指向window

// 箭头函数outFun是obj.inObj的一个属性
// 内部作用域是全局作用域
// 所以this指向window

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理