箭头函数需注意以下几点:
- 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
function App () {
this.a1 = 0;
this.a2 = 0;
//箭头函数
(() => {
this.a1 ++;
console.log(this); //App {a1: 1, a2: 0}
})();
//普通函数
(function () {
this.a2 ++;
console.log(this); //Window{}
})();
}
let app = new App();
console.log(app.a1,app.a2); //1 0
从打印结果可以看出箭头函数的this指向了定义时的函数(App),所以a1会加1,而普通函数指向的是Window,所以a2没有进行计算。
- 无法使用new关键字,即不能当做构造函数,不难看出,箭头函数其实很像匿名函数
- 不能使用arguments对象,因为箭头函数不存在此对象,可以使用rest代替
//箭头函数
let app = () => {
console.log('arr:' + arguments);//报错:arguments is not defined
}
//普通函数
function app() {
console.log(arguments);//Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
app(1,2,3,4);
- 不可以使用yield命令,所以箭头函数不能用作 Generator 函数。