1)定义
箭头函数提供了一种更加简洁的函数书写方式。基本语法是:
参数 => 函数体 (参数) => {函数体}
var fn = (a) => {
console.log(a);
}
fn(10)
(1)如果箭头函数的执行体只有一个表达式,就是返回值, 那么可以省略大括号
var fn = (a,b) => a*b
var re = fn(2,3)
console.log(re);
(2) 如果箭头函数的形参只有一个, 可以省略参数体小括号
var fn2 = a => a*a
var re = fn(2)
console.log(re);
(3) 如果箭头函数没有形参或者两个以上形参,必须加上小括号
var fn = () => {
console.log(123);
}
fn()
var fn2 = (a,b,c) => a+b+c
var re = fn2(2,3,4)
console.log(re);
(4)箭头函数不能用作创建对象,也就是不能使用 new
var fn = () => {
}
var f1 = new fn()
(5) 箭头函数内部不能使用arguments,而是使用剩余运算符(...)来查看实参,并且剩余参数必须放在最后一个
var fn = (a,...x1) => {
console.log(a);
console.log(x1);
}
fn(1,2,3,4)
(6)箭头函数在对象中,this表示全局window对象
var obj = {
name:"xiaozhang",
say: () => {
console.log(this);
}
}
obj.say() // 虽然调用者是obj,但是this指向的是全局对象Window
(7)箭头函数也不能使用call、apply、bind方法来改变this的指向
var obj = {
name:"xiaozhang",
say: () => {
console.log(this);
}
}
var obj2 = {
}
obj.say.call(obj2)
obj.say.apply(obj2)
2)适合使用的场景
1.需要维护一个 this 上下文的时候,就可以使用箭头函数。
2.箭头函数适合于无复杂逻辑或无副作用的纯函数场景下,例如,map、reduce、filter的回调函数定义中
3.不适合定义对象的方法(如:对象原型方法、构造器方法)
4.不适合定义结合动态上下文的回调函数(如:事件绑定函数),箭头函数在声明的时候会绑定静态上下文
3)箭头函数总结
-
要有个箭头
-
箭头的前面是小括号,放形参,只有一个形参的时候可以省略小括号;
-
箭头的后面是函数体;
-
如果函数体只有一个语句,没有{},此时的返回值不需要return;
-
箭头函数里面的this总是指向最靠近的function 内部的this;
-
对象里面的方法,尽可能不要使用箭头函数;
-
箭头函数里面没有arguments,可以使用…reset,接收过来就是数组类型,接收的是形参之外的所有的实参;