ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 箭头函数本质还是函数,我们来看看他与JavaScript中普通函数的区别,先看看写法上的区别。

写箭头函数,我们记住一个顺序就好,参数、箭头、函数体、这个顺序记住就足够了,参数、箭头、函数体、这三个是必须的,函数名可以没有,但这三项必须有,一些简写的方式也是简写这三项里的东西。
1.如何定义箭头函数
例如:
<script>
let sayHello = ()=>console.log('Hello,Javascript');
sayHello();
</script>
运行结果:
Hello,Javascript
如果函数体只有一行代码,大括号可以省略。
如果带多个参数,例如:
<script>
let add = (x,y)=>{
console.log(x+y);
return x+y;
}
console.log(add(10,7));
</script>
运行结果:
17
17
2.this指向问题
箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。
例如:
<script>
var sum = 100;
var obj = {
sum: 10,
fun:function(){
let f =()=>console.log(this.sum);
return f;
}
};
function con(callback) {
callback();
}
obj.fun()();
con(obj.fun());
</script>
运行结果:
10
10
说明使用了箭头函数,this明确指向obj对象。
如果使用匿名函数,改写如下:
<script>
var sum = 100;
var obj = {
sum: 10,
fun:function(){
//let f =()=>console.log(this.sum);
let f = function(){
console.log(this.sum);
};
return f;
}
};
function con(callback) {
callback();
}
obj.fun()();
con(obj.fun());
</script>
运行结果:
100
100
说明匿名函数里的this指向window对象。
注意:如果最外层的sum使用let声明,则不会绑定到window对象。
<script>
let sum = 100;
var obj = {
sum: 10,
fun:function(){
//let f =()=>console.log(this.sum);
let f = function(){
console.log(this.sum);
};
return f;
}
};
function con(callback) {
callback();
}
obj.fun()();
con(obj.fun());
</script>
运行结果: undefined undefined