箭头函数更加简洁,隐式返回值
const isEven = n => n % 2 === 0;
const square = n => n * n;
简化回调函数
// 正常函数写法
[1,2,3].map(function (x) {
return x * x;
});
// 箭头函数写法
[1,2,3].map(x => x * x); //[1,4,9]
没有自己的this
(1)普通函数,谁调用它,this就指向谁。
(2)箭头函数,在哪里定义函数,this就指向谁,箭头函数的this实际是外层函数的this。
(3)下述例子中,箭头函数的this就是外层的sayName()函数的this,即obj对象。
例:
<script type="text/javascript">
let obj = {
name: "小明",
age: 12,
friends: 'xiaohong',
sayName() {
console.log(this)
console.log(this.name); //这里的this指向obj
// 使用普通函数,this指向会改变,在下面的定时器中指向window对象
setTimeout(function() {
console.log(this)
console.log(`我是${this.name}`)
}, 1000);
// 如果用箭头函数则没有上述问题,此时this指向obj
setTimeout(() => {
console.log(this);
console.log(this.name)
}, 1000)
}
}
obj.sayName()
</script>
箭头函数不能当做构造函数
let foo=()=>{
}
var newFoo=new foo()//foo is not a construcotr
不存在arguement对象,如果要用,可以使用rest参数…解决
let C = (...c) => {
console.log(c);
}
C(1,2,3,3)
箭头函数没有原型对象(prototype)
var foo = () => {
return 1
}
function bar(){
return 2;
}
console.log(foo.prototype) //undefined
console.log(bar.prototype) // {constructor:f}