ES6箭头函数与普通函数的区别

javaScript

使用箭头函数几个注意点

  1. 函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象
  2. 不可以使用 arguments 对象,改对象在函数体内是不存在的,如果要用可以用 param 参数代替
  3. 不可以当构造函数,因没有本身的 this 对象,也就不可以使用new命令,否则会抛出一个错误
  4. 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数
  5. 由于箭头函数没有自己的 this,所以当然也就不能用 call()、apply()、bind() 这些方法去改变 this 的指向

上面五点中,第一点尤其值得注意。this 对象的指向是可变的,但是在箭头函数中,它是固定的。

function foo() { setTimeout(() => { console.log('id:', this.id); }, 100); } const id = 21; foo.call({ id: 42 }); // id: 42

this 指向的固定化,并不是因为箭头函数内部有绑定 this 的机制,实际原因是箭头函数根本没有自己的 this,导致内部的 this 就是外层代码块的 this 。正是因为它没有 this ,所以也就不能用作构造函数。