箭头函数

69 阅读1分钟

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关键字
  • 不能充当对象的方法