Non utilizzare l'operatore delete
sugli identificatori (in variabili di ambito, funzioni - come sum
- o argomenti di funzione).
Lo scopo dell'operatore delete
è quello di eliminare le proprietà dell'oggetto .
Quando si dichiara una variabile, una dichiarazione di funzione o argomenti di funzione, dietro le quinte questi identificatori sono in realtà proprietà che appartengono allo scope corrente in cui sono stati dichiarati environment record.
Queste proprietà sono definite esplicitamente internamente come non configurabili, non possono essere eliminate. Inoltre, l'utilizzo dell'operatore delete
è stato così frainteso che in modalità Strict ES5, il suo utilizzo sugli identificatori è stato completamente disabilitato, delete sum;
dovrebbe generare un ReferenceError
.
Edit:
Come @SLacks notato nei commenti questione, l'operatore delete
funziona con identificatori dalla console del Firebug, è perché il Firebug utilizza eval
per eseguire il codice immesso nella console, e l'ambiente variabile binding di identificatori istanziati nel codice eseguiti da eval
, sono mutabili, il che significa che possono essere cancellati, questo era probabilmente per consentire al programmatore di eliminare in fase di esecuzione dichiarato in modo dinamico le variabili con eval, ad esempio:
eval('var sum = function() {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"
Si può vedere come questo accade anche sulla console:
E questo è probabilmente quello che è successo con il libro che si sta leggendo, l'autore ha fatto le sue prove su una console basata su eval
.
Cosa restituisce? funzione, presumo, ma solo controllo. –
Funziona per me (in Firebug). Inoltre, ti manca un ';'. – SLaks
@SLaks - Quando dici "Funziona per me", cosa significa esattamente? –