箭头函数
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)