作者:李旭光
引用请标明出处
this
this 是很多人会混淆的概念,但是其实他一点都不难,你只需要记住几个规则就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| // js代码
function foo() { console.log(this.a) } var a = 1 foo()
var obj = { a: 2, foo: foo } obj.foo()
// 以上两者情况 `this` 只依赖于调用函数前的对象,优先级是第二个情况大于第一个情况
// 以下情况是优先级最高的,`this` 只会绑定在 `c` 上,不会被任何方式修改 `this` 指向 var c = new foo() c.a = 3 console.log(c.a)
// 还有种就是利用 `call` , `apply` , `bind` 改变 `this` ,这个优先级仅次于 `new`
|
以上几种情况明白了,很多代码中的 this
应该就没什么问题了,下面让我们看看箭头函数中的 this
1 2 3 4 5 6 7 8 9 10
| // js代码
function a() { return () => { return () => { console.log(this) } } } console.log(a()()())
|
箭头函数其实是没有 this
的,这个函数中的 this
只取决于他外面的第一个不是箭头函数的函数的 this
。在这个例子中,因为调用 a
符合前面代码中的第一个情况,所以 this
是 window。并且
this 一旦绑定了上下文,就不会被任何代码改变。