this指向的问题(秒懂-简单又权威)

2022-03-19  本文已影响0人  这样你就找不到我了

关于ES6中this指向的问题,搜索了一些视频和文字教程,看得我自己云里雾里。

遂翻红宝书第四版至300页,原来这么简单。

总结为两句话:
1, 标准函数this引用的是把函数当成方法调用的上下文对象
2, 箭头函数this引用的是定义箭头函数的上下文(call 等方法无法改变其指向)

再加一句吧:

  1. 闭包里函数的this在非严格模式下指向window,严格模式下指向undefine

原文:


《javaScript高级程序设计》第四版P300.jpg

来举例子:

var name = 222;
var a = {
  name: 111,
  say: function () {
    console.log(this.name);
  },
};

var fun = a.say;
fun(); //222   因为fun()的上下文是window
a.say(); //111 因为这里是a才是调用say()的上下文对象,所以this指向a

var b = {
  name: 333,
  say: function (fun) {
    fun();
  },
};

b.say(a.say); //222 函数中的函数,this指向window(非严格模式)
b.say = a.say; //这样就不是闭包啦,this指向重新变成了调用它的上下文对象,也就是b
b.say(); //333
上一篇下一篇

猜你喜欢

热点阅读