Arrow-Funktion vs. Funktionsdeklaration / -ausdrücke: Sind sie gleichwertig / austauschbar?

Canonical frage Wenn Sie nach dem Ersetzen einer Funktionsdeklaration / eines Funktionsausdrucks durch eine Pfeilfunktion eine Frage zu Problemen haben, schließen Sie diese bitte als Duplikat.

Arrow-Funktionen in ES2015 bieten eine präzisere Syntax. Kann ich jetzt alle meine Funktionsdeklarationen / -ausdrücke durch Pfeilfunktionen ersetzen? Worauf muss ich achten?

Beispiele:

Constructor-Funktion

function User(name) {
  this.name = name;
}

// vs

const User = name => {
  this.name = name;
};

Prototypmethoden

User.prototype.getName = function() {
  return this.name;
};

// vs

User.prototype.getName = () => this.name;

Object (Literal) Methoden

const obj = {
  getName: function() {
    // ...
  }
};

// vs

const obj = {
  getName: () => {
    // ...
  }
};

Rückruf

setTimeout(function() {
  // ...
}, 500);

// vs

setTimeout(() => {
  // ...
}, 500);

Variadische Funktionen

function sum() {
  let args = [].slice.call(arguments);
  // ...
}

// vs
const sum = (...args) => {
  // ...
};

Antworten auf die Frage(6)

Ihre Antwort auf die Frage