箭头函数

 1     //可变参数
 2     (x, y, ...rest)=>{
 3         var i, sum = x + y
 4         for (i = 0;  i < rest.length; i++) {
 5             sum += rest[i]
 6         }
 7         return sum
 8     }
 9 
10     //如果要返回一个对象就需要括号括起来,因为和函数体{...}有语法冲突
11     // x => {foo : x} 报错
12     x =>({ foo: x })
13 
14 
15     /*
16         this
17         箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。
18 
19         箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者
20     */
21     var obj = {
22         birth: 1990,
23         getAge: function (){
24             var fn = ()=> new Date().getFullYear() - this.birth //this指向obj对象
25             return fn();
26         }
27     }
28     console.log(obj.getAge())
29 
30     //由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略
31     var objs = {
32         birth: 1990,
33         getAge: function (year) {
34             var fn = (y)=> y - this.birth
35             return fn.call({birth:2000}, year)
36         }
37     }
38     console.log(objs.getAge(2015))

 

// 没有参数的时候
let fn = () => console.log(3)

// 只有一个参数的时候
let fn2 = v => console.log(v)

// 有多个参数
let fn3 = (v1, v2, v3) => console.log(v1, v2, v3)

posted @ 2017-04-01 16:53  咬尾巴的狐狸  阅读(126)  评论(0编辑  收藏  举报