// 普通函数
function fn() {
console.log(this);
}
fn(); // 打印结果为: window{...}
复制代码
结论: 普通函数内部this指向Window函数
特别提醒: this
‘use strict’严格模式下this指向undefinedspa
// 对象的方法
var obj = {
age: 20,
sayHi: function() {
console.log(this);
}
}
obj.sayHi(); // 打印结果为: {age: 20, say: ƒ}
复制代码
结论: 对象的方法的this指向obj对象code
// 构造函数
function Star() {
console.log(this); // Star {}
};
var andy = new Star();
复制代码
结论: 构造函数this指向andy这个实例对象cdn
特别提醒: 对象
严格模式下,若是 构造函数不加new调用, this 指向的是undefined,若是给他赋值则会报错!blog
// 绑定事件函数
var btn = document.querySelector('button');
btn.onclick = function() {
console.dir(this);
}; // 打印结果: button
复制代码
结论: 绑定事件函数this指向的是函数的调用者 也就是btn这个按钮对象事件
// 定时器函数
window.setTimeout(function() {
console.log(this);
}, 1000); // 打印结果: window
复制代码
结论: 定时器函数中this指向也是windowit
// 当即执行函数
(function() {
console.log(this);
})(); // 打印结果: window
复制代码
结论: 当即执行函数中的this也是指向windowio
// 箭头函数
var obj = {
sayHi: () => {
console.log(this.age);
}
}
obj.sayHi(); // window
复制代码
结论: 箭头函数没有本身的this,看其外层的是否有函数,若是有,外层函数的this就是内部箭头函数的this,若是没有,则this是window.
关于如何寻找函数中的this,我用一张图来讲明!