this和作用域不一样,作用域是声明的时候就定下来了,this是在调用的时候才确定下来
this 是一个使用在作用域里面的关键字
-
不管函数怎么定义, 不管函数在哪定义, 只看函数的调用方式
-
函数调用: 不计算箭头函数
1. 全局调用(直接调用) => 函数名() 2. 对象调用 => 对象名.函数名() 3. 事件处理函数 => 元素.onclick = function () {} => 元素.addEventListener('click', function () {}) 4. 定时器处理函数 => setTimeout(function () {}, 时间) => setInterval(function () {}, 时间) 5. 自调用函数(自执行函数) => (function () {})() 6. 构造函数 => new 构造函数名() 以上六种方式中不包含箭头函数, 如果你有用箭头函数书写的函数 => 那么按照箭头函数的规则来确定 this 指向
-
函数内部的 this 指向
1. 全局调用(直接调用) => this 指向 window 2. 对象调用 => 点前面是谁就是谁 => 对象名.函数名() 这里面的 this 就是点前面的那个 对象 -> 比如你写 obj.fn() fn 函数里面的 this 就是 obj -> 比如你写 aaa.fn() fn 函数里面的 this 就是 aaa 3. 事件处理函数调用 => this 指向 事件源 => 事件源: 谁身上的事件 -> 比如你写 div.onclick = function () {}, 这里面的 this 就是 div -> 比如你写 ul.onclick = function () {}, 这里面的 this 就是 ul 4. 定时器处理函数 => this 指向 window 5. 自调用函数(自执行函数) => this 指向 window 6. 构造函数调用 => this 指向当前实例 => 就是你写 const xxx = new 构造函数() -> 前面的 xxx 是什么, 构造函数体内的 this 就是什么 7. 箭头函数 => 箭头函数里面没有 this, 箭头函数的 this 是 context(上下文) => 箭头函数定义的外部作用域的 this 就是箭头函数内部的 this