JS中的this指向

❗以下this指向均在非严格模式下,在严格模式下,如果 this 没有被执行环境(execution context)定义,那它将保持为 undefined

函数this指向

  • this指向函数运行时所在的对象,而不是函数被创建时所在的对象。
  • 匿名函数或者简单调用的函数来说,this指向window,剩下的函数调用,指向调用者。
  • 如果有new关键字,this指向new出来的那个对象。
  • 可以通过applycallbind改变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(); // obj

// 箭头函数
let obj = {
a: () => console.log(this)
}
obj.a(); // Window
  • 箭头函数是没有 this **的,函数中的 this 指向的是它当前周围作用域(简单来说是包含箭头函数的常规函数,如果没有常规函数的话就是全局对象**)
1
2
3
4
5
6
// 外层函数是普通函数
let obj = {}
function a() {
return () => console.log(this);
}
a.call(obj)();// obj
  • 普通函数中的this指向是可变的,但是在箭头函数中,它是固定的,无法改变。
1
2
3
4
5
6
7
8
9
10
11
// 普通函数
let obj = {};
let a = function () {
console.log(this);
}
a.call(obj); // obj

// 箭头函数
let obj = {};
let a = () => console.log(this);
a.call(obj) // Window

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×