this
在浏览器平台下运行 JS ,非函数当中的this 一般都指向 window。 因此这里讨论的是函数执行过程中的 this 需要注意在 ES6+ 的箭头函数中是没有自己this的,处理机制是使用自己上下文里的 this
this是什么
this 就是当前函数执行的主体(谁执行了函数),不等于执行上下文,当前作用域
常见this场景
- 事件绑定
- 普通函数
- 构造函数
- 箭头函数
- 基于 call/bind/apply 强制改变 this 指向
规律
- 事件绑定
- 不论是DOM2还是 DOM0 事件绑定,事件触发时this一般都是被操作的元素
- 普通函数
- 函数执行时查看前面是否有点,如果有点,则点前面的就是执行主体,没有点就是 window,严格模式下是 undefined
- 特殊情况
- 匿名函数中的 this 是 window 或者 undefined
- 回调函数中的 this 一般也是window或者 undefined
- 小括号语法
- 如果小括号只有一项,则相当于没加
- 如果小括号当中有多项,则取出最后一项,此时相当于拷贝函数,所以调用时主体是 window
this 练习
js
(function () {
console.log(this)
})()
let arr = [1, 3, 5, 7]
obj = {
name: '跳跳'
}
arr.map(function (item, index) {
console.log(this)
}, obj)
------------------------------------------------------
//? 普通函数调用
let obj = {
fn: function () {
console.log(this, 111)
}
}
let fn = obj.fn;
fn() // window
obj.fn(); // obj
(10, fn, obj.fn)();
------------------------------------------------------
var a = 3,
obj = { a: 5 }
obj.fn = (function () {
this.a *= ++a
return function (b) {
this.a *= (++a) + b
console.log(a)
}
})();
var fn = obj.fn
obj.fn(6)
fn(4)
console.log(obj.a, a)