箭头函数和this指向
其实this指向也就箭头函数比较特殊, 其他的情况都是谁调用,指向谁, 然后call apply改变this 指向, apply传数组.
- 箭头函数没有自己的this, 里面的this, 指向它的父级或者说所处的环境的this;箭头函数不能做generator函数, 不能用call apply 改变this(bind不执行)
- 其他的this 指向它的调用者, 注意, 有的调用者比较隐蔽
// 1. 箭头函数没有自己的this...这就是为什么vue的钩子函数不能用箭头函数, 但是里面可以用
var name1 = 'a' // 这里用let 的话 f2的结果就是undefined
let obj1 = {
name1: 'b',
f1() {
let s = () => { // 处在f1的环境, f1的this指向obj1
console.log(this.name1)
}
s()
},
f2: () => {
console.log(this.name1) // 处在obj1的环境 obj1 在全局
},
f3() { console.log(this.name) }
}
obj1.f1() // 'b'
obj1.f2() // 'a'
obj1.f3(); // 'b' 这里加分号,不然和下面的括号连一起了
(2 > 1 ? obj1.f3 : 2)() // 'a' 这个实际上就是window在调用, 只不过没用变量接收罢了.