Nehmen Sie diesen Code zum Beispiel; es ist eine Redux Minderer Funktion:Führt es zu einem Speicherverlust, wenn Sie den Blockbereich nicht innerhalb eines Switch-Falls deklarieren? (ESLint no-case-declarations)
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case EMPLOYEE_UPDATE: { <-- this {
// action.payload === { prop: 'name', value: 'Jane' }
const { prop, value } = action.payload
return { ...state, [prop]: value }
} <-- and this }
default:
return state
}
}
Ich habe lediglich versucht, um Doppelarbeit destrukturiert action.payload zu minimieren, und ich bemerkte, dass es die ES Lint Regel wurde erschwerende (no-Fall-Erklärungen). Normalerweise könnte ich es nach Bestätigung der Regel ausschalten. Dies scheint viel ernster aufgrund diesem ES Lint Definition:
... Der Grund dafür ist, dass die lexikalische Erklärung im gesamten Schalterblock sichtbar ist, aber es wird nur initialisiert, wenn sie zugeordnet ist, das nur passiert, wenn der Fall, wo es definiert ist, erreicht ist.
Wenn ich Speicherverlust Potenzial richtig erinnere, bedeutet das der Compiler einen Verweis auf action.payload
jederzeit aufrechterhalten werden? - Bedeutet das, dass wenn eine große Schleife, ein Dataset oder eine lang laufende Berechnung dort hineingelangt, es massiven Speicherverbrauch verursachen könnte, obwohl der Fall nur dann ausgeführt wird, wenn übereinstimmt, weil es nicht garbage collected oder ignored sein kann?
In erster Linie, ist meine Interpretation richtig?
Die Natur meiner Frage ist um was genau {
und }
in diesem Ausführungskontext/lexikalische Umgebung schützen. Ist es nur Speicherleckpotential oder gibt es ein Thema, das ich auch nicht erwähnt habe?
Diese Regel sieht für mich falsch aus. Sie haben einen Block um den Case-Code. – Pointy
Nein, das bedeutet, dass Sie, wenn Sie in den Fällen keine Blockanweisungen umbrechen, die Deklarationen für alle Fälle freigeben. – MinusFour
Die zusätzlichen Blöcke in den Fällen schützen Sie nur vor einer Variablenkollision, wenn Sie zwei Variablen mit demselben Namen in verschiedenen Fällen deklarieren. Ohne die geschweiften Klammern befinden sie sich im selben Block, dem 'switch'. Nicht mehr und nicht weniger. Wenn es ein Speicherleck geben würde, würden die Klammern nichts daran ändern. – Thomas