THIS:函数执行的主体(谁执行的函数)
- 事件绑定
- 函数执行(普通函数执行、成员访问、匿名函数、回调函数)
- 构造函数
- 箭头函数(生成器函数generator)
- 基于call/apply/bind强制改变this指向
console.log(this);
//->全局上下文中的this:window
//->块级上下文中没有自己的this,所用的this都是继承上下文中的this(箭头函数也是)
/*
* 事件绑定
* DOM0: xxx.onxxx = function () {}
* DOM2:
* xxx.addEventListener('xxx',function(){})
* xxx.attachEvent('onxxx',function(){})
*
* 给当前的元素的某个事件行为绑定方法(此时是创建方法,方法没执行),当事件行为触发,浏览器会把绑定的函数执行,此时函数中的this就是当前元素对象本身
* 特殊:基于attachEvent实现事件绑定,方法执行,方法中的this就是window
*/
document.body.assEventListener('click', function () {
console.log(this); //->body
});
"use strict";
function fn() {
console.log(this);
}
let obj = {
name: 'zhufeng',
fn
}
fn();
obj.fn();
(obj.fn)();
(10, obj.fn)();
(function (x) {
console.log(this);
})(10);
function fn(callback) {
callback();
}
fn(function () {
console.log(this);
});
let arr = [10, 20, 30];
arr.forEach(function (item, index) {
console.log(this);
},{xxx:'xxx'});
setTimeout(function (x) {
console.log(this, x);
}, 1000, 10);