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