>[success] # 箭头函数 ~~~ 1.es6 新增了箭头函数用来消除'this'在函数指向问题, 箭头函数的'this' 指向是由最外层最近的一层非箭头函数, 决定的 ~~~ >[danger] ##### 箭头函数特点 ~~~ 1."没有'this'、'super'、'arguments'、'new.target'绑定",这 些值都是由他们最外一层的非箭头函数决定的 2."不能通过new 关键字调用",箭头函数没有'[[Construct]]'方法 ,所以不能用作构造函数 3."没有原型",因为不能new 所以不能构造原型,因此就没有'prototype' 4."不可以改变this的绑定",函数中的'this'值是不可以改变的,在函数生命 周期中始终一致的 5."不支持arguments对象",箭头函数中没有'arguments'绑定,所以只能 使用'命名参数'和'不定参数' 6."不支持重复命名参数",箭头函数无论在严格模式还是非严格模式都不支持, 重复命名参数,传统函数只有在严格模式不支持 ~~~ >[info] ## 箭头函数的书写方式 ~~~ 1.箭头函数省略函数体'{}'就相当于直接return 2.当一个参数时候可以不用写'()' 3.如果想通过简写的方式返回一个对象的字面量,需要用'()'包裹住 4.如果不想玩的花里胡哨,普通函数怎么写箭头函数就怎么写里面的 函数体 ~~~ >[danger] ##### 只有一个参数时候和当没有函数体'{}'的时候 ~~~ 1.当只有一个参数的时候,可以省略'()',当省略函数体'{}'相当于 直接'return' ~~~ * 案例 ~~~ const test = value => value console.log(test('wang')) // wang ~~~ >[danger] ##### 没有参数的时候需要带'()' ~~~ 1.当函数不需要参数的时候需要写'()' ~~~ ~~~ const test = () =>{ return 1+1} console.log(test()) // 2 ~~~ >[danger] ##### 想同过简写方式返回对象的字面量 ~~~ 1.想通过简写的方式返回对象的字面,直接用'()'包住字面量对象 ~~~ ~~~ const test = () =>({id:'1'}) console.log(test()) // {id:'1'} ~~~ >[info] ## 箭头函数的立即执行函数 ~~~ 1.箭头函数和普通函数,在立即执行上写法略有区别,箭头函数需要把整个 函数用'()'包裹住,在调用 ~~~ ~~~ // 箭头函数立即执行 const test = (() =>{return {id:'1'}})() // 普通函数的立即执行 const test1 = function () { return {id:"1"} }() console.log(test) // {id:"1"} console.log(test1) // {id:"1"} ~~~