js箭头函数

https://segmentfault.com/a/1190000020134330

为什么要引用js箭头函数: (更简短的函数并且不绑定this。)

1 简短的函数: 

 无参数 ()=>{return }

 有1个参数 (v)=>{return }

 有两个参数 (v1,v2)=>{return }

 当只有一个参数的时候: 省略()

 当只有一个return的时候: 省略return和或括号

2 不绑定this:

第一个匿名参数有自己的上下文(指向的并非obj对象),当被赋值给anon变量且调用时,this发生了改变,指向了window。调用的应该是windows进行调用!

另一个,箭头函数与创建它的函数有相同的上下文,故指向obj对象。

 当通过call或者apply调用

由于箭头函数没有自己的this指针,通过call()或者apply()方法调用一个函数时,只能传递参数(不能绑定this),它们的第一个参数会被忽略。

 不绑定arguments

箭头函数不绑定Arguments对象。因此,在本示例中,arguments只是引用了封闭作用域内的arguments:

二:怎么用?

1 优化代码:
 遍历每一个数组:

  const d= words.map( word=>word.toLowerCase());

 返回对象的某个值:

  const c = object.map(object=> object.name)

  用forEach来替换传统for循环的时候,实际上箭头函数会直观的保持this来自于父一级:

2 promise和promise链:

 异步代码 箭头函数:

 this.do().then( (result)= >{ this.storResult(result);})

3 对象转化:

 Vue 的通用模式

三什么时候不能用?

1 函数体内的this对象就是定义时候的所在对象,而不是使用的时候在的对象。

2 不能当做构造函数。不能喝new一起使用。所以没有prototype属性。

3 不能yield关键字。

4 不可以使用arguments对象,如果要用,可以使用rest参数。

四,使用机会:

使用三元运算符

var foo = a => a > 15 ? 15 : a;

foo(10); // 10
foo(16); // 15

闭包

// 标准的闭包函数
function Add() {
  var i = 0;
  return function() {
    return (++i);
  }
}

var add = Add();
add(); // 1
add(); // 2

// 箭头函数体的闭包(i = 0是默认参数)
var Add = (i = 0) => { return (() => (++i)) };
var add = Add();
add(); // 1
add(); // 2

// 因为仅有一个返回,return及括号也可以省略
var Add = (i = 0) => () => (++i);

箭头函数递归

 
var fact = (x) => ( x == 0 ?  1 : x*fact(x-1) );
fact(5);       // 120
原文地址:https://www.cnblogs.com/hacker-caomei/p/14295056.html