- 沿着作用域向上找最近的一个function(非箭头函数),看这个function最终是怎样执行的
- this指向取决于所属function的调用方式
function调用一般分为几个情况
- 作为函数调用(foo())
- 指向全局,globalThis 严格模式下是Undefined
- 作为方法调用 foo.bar() foo.bar.baz() foo[‘bar’]
- 指向最终调用这个方法的对象
- 最为构造函数调用 new Foo()
- 指向一个新对象Foo{}
- 特殊调用 foo.call() foo.apply() foo,bind()
- 指向参数指定的成员
- 如果找不到function,指向全局
var length = 10
function fn(){
console.log(this.length)
}
const obj = {
length = 5
method(fn){
fn() //10
argument[0]() // 3 this指向argument 作为argument的方法调用
}
}
obj.method(fn,1,2)
- 作为函数调用(foo())
箭头函数
- 把箭头函数当做if else 就找最近的function
- node环境下 最顶层的作用域实际上是一个伪全局对象,所以顶层的this不指向全局
- 文件里指向module.exports 模块的导出的对象 node环境下包裹在一个自调用函数