❗以下this指向均在非严格模式下,在严格模式下,如果 this
没有被执行环境(execution context)定义,那它将保持为 undefined
。
函数this指向
this
指向函数运行时所在的对象,而不是函数被创建时所在的对象。
- 匿名函数或者简单调用的函数来说,
this
指向window
,剩下的函数调用,指向调用者。
- 如果有
new
关键字,this
指向new
出来的那个对象。
- 可以通过
apply
,call
,bind
改变this
的指向。
- 箭头函数没有this,指向取决于该箭头函数声明的位置,在哪里声明,
this
就指向哪里。
箭头函数中的this
- 箭头函数的
this
指向,是定义时所在的对象,而不是使用时所在的对象。
1 2 3 4 5 6 7 8 9 10 11 12 13
| let obj = { a: function () { console.log(this) } } obj.a();
let obj = { a: () => console.log(this) } obj.a();
|
- 箭头函数是没有
this
**的,函数中的 this
指向的是它当前周围作用域(简单来说是包含箭头函数的常规函数,如果没有常规函数的话就是全局对象**)
1 2 3 4 5 6
| let obj = {} function a() { return () => console.log(this); } a.call(obj)();
|
- 普通函数中的
this
指向是可变的,但是在箭头函数中,它是固定的,无法改变。
1 2 3 4 5 6 7 8 9 10 11
| let obj = {}; let a = function () { console.log(this); } a.call(obj);
let obj = {}; let a = () => console.log(this); a.call(obj)
|