- 普通函数/方法中的this, 谁调用就是谁
- 箭头函数中的this, 是父作用域的this,不是调用者
1 | let p = { |
- 定义一个函数会开启一个作用域,因为没有将箭头函数放到其它的函数中(只是将箭头函数放在了对象里面),所以箭头函数属于全局作用域,那么tihs就是Window 对象
- 因为将箭头函数放到其它的函数中,所以箭头函数属于其它函数(当前的其它函数就是构造函数),既然箭头函数属于构造函数,所以箭头函数中的this就是构造函数的this
1 | function Person() { |
- 注意点: 箭头函数中的this永远都只看它所属的作用域的this,无法通过bind/call/apply来修改
1 | function Person() { |
下面看箭头函数可以解决的一个this指向问题
1 | var num = 0; |
解释下:setTimeout中函数内的this是指向了window对象,这是由于setTimeout()调用的代码运行在与所在函数完全分离的执行环境上。
- MDN上关于”this”的问题
由setTimeout()调用的代码运行在与所在函数完全分离的执行环境上。这会导致,这些代码中包含的 this 关键字在非严格模式会指向 window (或全局)对象,严格模式下为 undefined,这和所期望的this的值是不一样的。
1 | var num = 0; |
- 上面的代码将setTimeout放在了getNumLater函数里面,所以setTimeout的父作用域就是了getNumLater函数开启的作用域,作用域里面的this,谁调用getNumLater函数,this就指向谁,也就是obj