No debe utilizar el operador delete
en identificadores (en variables de ámbito, funciones - como sum
- o argumentos de funciones).
El propósito del operador delete
es eliminar las propiedades del objeto .
Cuando declara una variable una declaración de función o argumentos de función, detrás de escena estos identificadores son en realidad propiedades que pertenecen al environment record del ámbito actual donde se declararon.
Esas propiedades están explícitamente definidas internamente como no configurables, no se pueden eliminar. Además, el uso del operador delete
ha sido tan mal interpretado que en ES5 Strict Mode, su uso en los identificadores ha sido completamente rechazado, delete sum;
debería arrojar un ReferenceError
.
Editar:
Como @SLacks señaló en los comentarios de interrogación, el operador delete
funciona con identificadores de consola de Firebug, eso es debido a que el Firebug utiliza eval
para ejecutar el código que ha ingresado en la consola, y los enlaces de variables de entorno de identificadores instanciados en el código ejecutado por eval
, son mutable, lo que significa que se pueden eliminar, esto era probablemente para permitir que el programador para eliminar en tiempo de ejecución declaró dinámicamente variables con eval, por ejemplo:
eval('var sum = function() {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"
Se puede ver cómo esto ocurre también en la consola:
Y eso es probablemente lo que sucedió con el libro que está leyendo, el autor hizo sus pruebas en una consola basada en eval
.
¿Qué devuelve? función, supongo, pero solo comprobando. –
Funciona para mí (en Firebug). Además, te estás perdiendo un ';'. – SLaks
@SLaks - Cuando dices "Funciona para mí", ¿qué significa eso exactamente? –