全面解析this指向 至少其中

普通函数
构造函数
箭头函数
方法调用

定时器

等等

this一般只在函数内使用,是函数所操作的对象。
每个function函数(非箭头函数)在每次调用时都会在函数内生成一个自己的this。
当两个函数嵌套定义时,内层函数中的this与外层函数中的this是完全独立的。
函数内this的值是在函数调用时才确定的,函数的调用方式不同,this也就不同。
func是一个函数
1,当函数直接调用时 func(); 函数内this的值是window对象,(在js严格模式"use strict";下,函数内this的值是null)
2,当把这个函数赋值给一个对象的方法obj.abc = func;
调用obj.abc()时,函数内this的值是obj对象,也就是函数所在的对象。
3,当把这个函数赋值给一个dom元素的事件 document.getElementById("id").onclick= func;
在事件触发时,函数内this的值是触发事件的那个dom元素。
4,当把这个函数作为构造函数使用时 new func();函数内this的值是一个新创建的对象。
5,当函数以 func.call(obj); 或 func.apply(obj); 方式调用时, 函数内this的值是call()或apply()方法的第一个参数。
6,当用 func2 = func.bind(obj); 返回一个新的函数。
不论func2函数用什么方式调用,函数内this的值永远都是bind()方法的第一个参数。
7,如果func是一个箭头函数 (x)=>{} ,箭头函数内没有自己的this。
如果在箭头函数内使用this,访问的是外层函数的this。

可以看看这个挺清除的 https://blog.csdn.net/foreverwy/article/details/78150563