//1.无参, 不可以省略括号,包含一行表达式可以省略括号{} 和 return
       var fn1 = function () { return 8;}
       var fn1 = ()=>{ return 8;}
       var fn1 = ()=> 8
       console.log(fn1())
       
       //2.一个参数, 可以省略括号,包含一行表达式可以省略括号{} 和 return
       var fn2 = function (a) { return a * 2;}
       var fn2 = a =>{ return a * 2;}
       var fn2 = a =>  a * 2;
       console.log(fn2(5))
       
       //3.多个参数
       var fn3 = function(a, b) { return a+b;}
       var fn3 = (a,b) => { return a+b;}
       var fn3 = (a,b) =>   a+b
       console.log(fn3(2,7))
       
       //4.可变参数
       var fn4 = function (a, b, ...c) { }
       var fn4 = (a, b, ...c) => { }
       
       //5.多条语句不能省略括号 和 return
       var fn5 = function (a, b) {
              let c = a + b;
              return c * 5;
            }
               
       var fn5 = (a, b)=> {
            let c = a + b;
            return c * 5;
          }
        console.log(fn5(3,7))
        
      //6.如果返回的是对象,需要用小括号括起来
       var fn6 = x =>({key : x})
       console.log(fn6(5))
       
       //7.箭头函数和匿名函数很相似,但是明显区别是this,箭头函数this指向词法作用域
       //非箭头函数 this指向在函数定义的时候确定不了,实际上this指向的是那个调用它的对象
       //箭头函数 this的总是指向词法作用域,也就是外层调用者Person
        var Person = {
           firstName : 'Zhang',
           lastName : 'San',
           getFullName : function () {

               //非箭头函数,打印undefined
              /* let fn = function () {
                   return this.firstName + ' ' + this.lastName;
               }*/

               //箭头函数,打印Zhang San
               let fn = ()=> this.firstName + ' ' + this.lastName;
               
               return fn();
           }
        };

       console.log(Person.getFullName());