Quando un metodo di classe o oggetto viene passato come callback (es. 'setTimeout(obj.method, 100)'), il contesto 'this' viene disconnesso assumendo 'undefined' o 'window'; si risolve con arrow function '() => obj.method()' o '.bind(this)'.
THIS_UNDEFINED_CALLBACK
→
Le variabili dichiarate con 'let' e 'const' subiscono l'hoisting ma non vengono inizializzate con undefined (come 'var'); accedere ad esse prima della riga di dichiarazione si trova nella Temporal Dead Zone e scatena ReferenceError.
REFERENCEERROR_TDZ
→
Per standard IEEE 754 il valore NaN (Not-a-Number) non è mai uguale a nessun valore, neanche a se stesso ('NaN === NaN' restituisce false); verificare la presenza di NaN con l'operatore di uguaglianza è un grave bug logico, si deve usare 'Number.isNaN(x)'.
NAN_EQUALITY_PITFALL
→
Un elemento HTML viene rimosso dal DOM della pagina ma non può essere liberato dal Garbage Collector perché una closure (es. un setInterval o listener su window) mantiene ancora una variabile che fa riferimento al nodo.
CLOSURE_MEMORY_LEAK
→
In 'use strict' mode e nei moduli ES6 non è consentito scrivere numeri interi con lo zero iniziale (es. '0123' interpretato come ottale 83); per definire numeri ottali moderni è obbligatorio il prefisso '0o' (es. '0o123').
SYNTAX_OCTAL_STRICT_MODE
→
Una funzione richiama se stessa all'infinito senza una condizione di terminazione (caso base) o una proprietà getter richiama se stessa, esaurendo lo spazio di memoria della call stack del motore JavaScript V8.
RANGEERROR_MAX_CALL_STACK
→
Il motore JavaScript cerca la variabile nell'intero scope chain (locale, closures, globale) senza trovarne la dichiarazione, solitamente a causa di typo nel nome o variabile dichiarata in un altro file non importato.
REFERENCEERROR_NOT_DEFINED
→
Dichiarare un parametro o variabile locale con lo stesso identico nome di una variabile dello scope genitore o globale impedisce l'accesso a quest'ultima, provocando bug logici silenti.
VARIABLE_SHADOWING_BUG
→