setTimeout(function () {
console.log(this) // window
}, 1)
为什么此处的 this 指向 window?先要了解到传统函数是如何定义 this 的
传统函数的 this 指向
根据函数调用的情况来决定 this 指向,主要有 3 种情况:
1. 如果该函数是一个构造函数,this 指向这个类的实例;
2. 严格模式下的函数调用,this 指向 undefined;
3. 如果该函数是一个对象的方法,this 指向这个对象。
再看 setTimeout 内部的实现(简化)
function setTimeout(callback, delay) {
// 省略
callback()
// 省略
}
回调函数并没有在任何对象之下被调用(表面来看),是不是和全局函数的调用类似?那全局函数在非严格模式下是注册在 Window 对象之中的,所以就可以解释,为什么 setTimeout、setInterval 的回调函数 中的 this,指向是 Window 了。