this

77次阅读

共计 556 个字符,预计需要花费 2 分钟才能阅读完成。

这只是写了一个简单的可理解的 this,后续可能会写一个复杂点的。


this

先看看几个函数调用的场景:

function foo() {console.log(this.a);
}
let a = 1;
foo();
const obj = {
    a: 2,
    foo: foo
}
obj.foo();
cosnt c = new foo();
  • 对于直接调用 foo 来说,不管 foo 函数被放在了什么地方,this 一定是 window
  • 对于 obj.foo() 来说,我们只需要记住,谁调用了函数,谁就是 this,所以在这个场景下 foo 函数中的 this 就是 obj 对象
  • 对于 new 的方式来说,this 被永远绑定在了 c 上面,不会被任何方式改变 this

再来看看下面的:

function a() {return () => {return () => {console.log(this);
        }
    }
}
console.log(a()()());

首先箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第一个普通函数的 this。在这个例子中,因为包裹箭头函数的第一个普通函数是 a,所以此时的 this 是 window。另外对箭头函数使用 bind 这类函数是无效的。
注:最后种情况也就是 bind 这些改变上下文的 API 了,对于这些函数来说,this 取决于第一个参数,如果第一参数为空,那么就是 window。

正文完
 0