箭头函数:this 等同于上一层非箭头的函数的 this 值或全局对象(window 或 undefined)
解释: 在箭头函数中,this的指向是由外层(函数或者全局)作用域来决定,如果往外层作用域查找 this 的指向,只要没有非箭头函数(普通函数)的包裹,就一直往外层查找,直到最外层的全局作用域。如果没有非箭头函数(普通函数)的包裹,即使包裹再多层对象 this 也是指向全局作用域的。
例一:
var name = 'window'
let obj = {
name: 'obj',
fn: function () {
return () => {
console.log(this.name) // 输出obj
}
}
}
obj.fn()()
例二:
var name = 'window'
let obj = {
name: 'obj',
fn: () => {
console.log(this.name) // node环境中输出undefined,浏览器中输出window
}
}
obj.fn()
例三:
即使包裹再多层对象,只要没有非箭头函数(普通函数)的包裹,this 就指向全局作用域
var name = 'window'
let obj1 = {
name: 'obj1',
obj2: {
name: 'obj2',
obj3: {
name: 'obj3',
obj4: {
name: 'obj4',
fn: () => {
console.log(this.name) // node环境中输出undefined,浏览器中输出window
}
}
}
}
}
obj1.obj2.obj3.obj4.fn()