1、书写上的区别
箭头函数的语法比普通函数更加简洁,而且在一定情况下还可以简写,比如:
function fun(x, y) {
return x + y;
}
let fun = (x, y) => { return x + y };
//1. 如果 () 内只有一个参数,可以省略 ()
//2. 如果 {} 内只有一句 return ...,可以省略 return 和 {}
2、参数上的区别
普通函数的参数是 arguments,而箭头函数是 arg,比如:
let arr = [1,2,3]
~function(){
console.log(arguments);
}(arr); //输出 [1,2,3]
let a = (...arg) => {
console.log(arg);
}
a(arr); //输出[1,2,3]
3、this 指向的区别
箭头函数没有自己的 this,它里面的 this 是继承所属上下文中的 this,而且使用 call 与 apply 都无法改变
let obj = { name: 'obj' }
function fun1() {
console.log(this);
}
fn1.call(obj);
let fun2() => { console.log(this); }
fn2.call(obj);
4、可否使用 new 关键字
箭头函数不能使用 new 生成构造函数,因为箭头函数没有 prototype,而 construct 在 prototype 里面
function Fun1() { this.x = 100; }
let f1 = new Fun1;
let Fun2 = () => { this.x = 200; }
let f2 = new Fun2; //输出 Fun2 is not a constructor