this
- 函数中的this
- 显式指定谁: obj.xxx()
- 通过call/apply指定谁调用: xxx.call(obj)
- 不指定谁调用: xxx() : window
- 回调函数: 看背后是通过谁来调用的: window/其它
箭头函数中的this
- 箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定。
- 箭头函数中的this指向固定化,原因是箭头函数没有自己的this,内部的this就是外层代码块(外层第一个不是箭头函数)的this,
- 没有this,所以不能作为构造函数,没有call,apply方法
var x = 111
var obj = {
x:222,
say:() =>{
console.log(this.xxx)
},
getValue:function(){
fn:()=>{
console.log(this.xxx)
}
}
}
obj.say()
obj.getValue()
- 注意:say()返回111,this继承自父执行上下午中的this,箭头函数就是say,与obj平级,父执行上下文是指window
- getValue()返回222,因为箭头函数与getValue平级,父级为obj
箭头函数的特点
- 箭头函数this是距离箭头函数最近的函数作用域或全局作用域,在运行期间的this值
- 箭头函数不能作为构造函数,不能使用new
- 箭头函数通过call和apply调用,不会改变this指向,只会传入参数
- 箭头函数没有原型属性
- 箭头函数没有arguments,caller,callee
- 箭头函数不能作为Generator函数,不能使用yield关键字
- 不能充当对象的方法