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

关于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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ES6 允许使用 “ 箭头 ” (=>)定义函数。 箭头函数 填 坑。 this的指向是 向上查找 非箭头函数的...
    kismetajun阅读 831评论 0 12
  • 首先对this的下个定义:this是在执行上下文创建时确定的一个在执行过程中不可更改的变量。 this只在函数调用...
    阿良__阅读 1,905评论 1 1
  • this指向问题可谓是js中一个老生常谈的话题了,不论是在实际开发还是前端面试中,this指向问题都或多或少让人“...
    5d042e28f252阅读 238评论 0 0
  • This指向问题 this指向什么,跟函数所处得位置是没有关系的 跟函数得调用者有关系 在严格模式下,与调用位置无...
    小丸子啊啊啊阅读 285评论 0 0
  • 日期:2019 年 9 月 5 日 this 指向问题 介绍 this 指向问题一直是 js 中一个令人头疼的问题...
    五十岚色叶阅读 353评论 0 3