• 沿着作用域向上找最近的一个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,指向全局
        1. var length = 10
        2. function fn(){
        3. console.log(this.length)
        4. }
        5. const obj = {
        6. length = 5
        7. method(fn){
        8. fn() //10
        9. argument[0]() // 3 this指向argument 作为argument的方法调用
        10. }
        11. }
        12. obj.method(fn,1,2)
    • 箭头函数

      • 把箭头函数当做if else 就找最近的function
    • node环境下 最顶层的作用域实际上是一个伪全局对象,所以顶层的this不指向全局
      • 文件里指向module.exports 模块的导出的对象 node环境下包裹在一个自调用函数