Foros del Web » Programando para Internet » Javascript »

funcion variables y delete

Estas en el tema de funcion variables y delete en el foro de Javascript en Foros del Web. Hola foro: El operador 'delete', según el manual de js, funciona cuando no declaramos una variable con var , es decir si sólo se declara ...
  #1 (permalink)  
Antiguo 22/12/2008, 10:34
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
funcion variables y delete

Hola foro:

El operador 'delete', según el manual de js, funciona cuando no declaramos una variable con var, es decir si sólo se declara implícitamente, entonces...

Si tengo por ejemplo en jquery

$("#boton1").clikc(function(){
var a=11;
b=22;
})

despué de hacer click en el botón que variables quedan en memoria? a, b o ambas? para evitar que la memoria tenga variables q no uso debo hacer un "delete a,b;" al final obligatoriamente o es opcional en estos casos?

gracias.
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
  #2 (permalink)  
Antiguo 22/12/2008, 11:58
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: funcion variables y delete

No sé en jQuery, pero en un click normal de javascript ambas quedan en memoria, sólo que una queda en el ámbito de la función anónima y la otra, que no existía, pasa a ser una nueva propiedad de window o del ámbito donde se encuentre la función anónima. En cuanto a cuándo borrarlas, cuando dejes de utilizarlas, pero no sólo usando delete las eliminás de memoria: también las eliminás igualándolas a null.
Pero no usar var puede ser peligroso. Por ejemplo, si tenemos declarada esta función:
Código PHP:
function algo(){
    return function(){
        
a=5;
    }

Si hacemos:
Código PHP:
alert(a)//error: a es undefined 
Si hacemos:
Código PHP:
algo();
alert(a)//error: a es undefined 
Si hacemos en cambio:
Código PHP:
algo()();
alert(a)//a=5 
Si en cambio tenemos otra función declarada así:
Código PHP:
function algo(){
    
        
a=5;

Si hacemos esto:
Código PHP:
alert(a)//error: a es undefined 
Si hacemos esto:
Código PHP:
algo()
alert(a)//5
alert(window.a)//5 
Es decir, aunque no sea tu intención, podés hacer que una variable se convierta en global sólo ejecutando la función si no le antepusiste el prefijo var.

Última edición por Panino5001; 22/12/2008 a las 12:04
  #3 (permalink)  
Antiguo 23/12/2008, 09:28
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: funcion variables y delete

Buen comentario pani...

En todo caso, según me parece si las declaramos con var se borran al terminar la funcion y si no las declaramos se hacen globales....

Entonces la recomendacion es declarar con var siempre... verdad? sobre todo si estas dentro de una funcion... así te evitas el eliminar de memoria.
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red

Última edición por killerangel; 23/12/2008 a las 09:44
  #4 (permalink)  
Antiguo 23/12/2008, 19:18
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: funcion variables y delete

Usar var es muy recomendable. Pero no implica que se borren de memoria al finalizar la función. Las variables quedan en memoria hasta que las nulificás vía null o delete, y eso aunque la función retorne (ver ejemplo) El usar var sólo previene errores.
Código PHP:
<script>
function 
test(s) {
    var 
s;
    return function(
s) {
      return 
s;
    };
  };

  var 
test("hola ");
  
alert(r("mundo!"));
</script> 

Última edición por Panino5001; 25/12/2008 a las 05:20
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:32.