Comunidad de diseño web y desarrollo en internet online

duda entre variable global y local

Citar            
MensajeEscrito el 16 Jul 2013 03:20 pm
Poniendo este código, al probarlo en el navegador, la consola me da el error: 'Uncaught ReferenceError: containerWidth is not defined', y no entiendo porqué. Si 'console.log' lo pongo dentro de la función sí que se ejecuta.

¿No se supone que las variables sin 'var' son globales? Seguro que he hecho alguna burrada. :oops:

Código Javascript :

<script>

   $('#button').click(function() {
      containerWidth = $('#container').width();
   });

   console.log(typeof containerWidth, containerWidth);

</script>

Por walden

Claber

120 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2013 03:47 pm
Si, pero cuando están en un 'addListing' o en 'function' o dentro de otra variable. Cuando no tiene el 'var', es una variable global, pero si la ejecutas, te darás cuenta que esta indefinida. Aqui te doy un ejemplo completo

Código HTML :

<script>
   var containerWidth; // Define la variable Global
   $('#button').click(function(e) {
      containerWidth = $('#container').width(); // Generando contenido a la variable local
      console.log(typeof containerWidth); // number
      otra = 'Hola'; // Variable Global
      var otra1 =  'Hola1'; // Variable Local
      console.log( typeof otra); // string
   });
   console.log(typeof containerWidth); // undefined
   console.log( containerWidth); // 960
   console.log(otra); // undefined
   console.log(otra1); // undefined
</script>

Se ejecutara todo linea por liena, y cuando llega al '$('#buttom')' tiene un 'addListing', eso quiere decir que cuando pase X va a ejecutar la función. Por eso la variable 'otra', esta indefinida, aunque sea Global.

Mejor?? O quieres que te de una mejor explicación?

Por alejonext

Claber

235 de clabLevel

2 tutoriales

Genero:Masculino  

artista

firefox
Citar            
MensajeEscrito el 16 Jul 2013 03:49 pm
Pasa que esa variable solo esta definida en el ámbito de la función.
Deberías definir la variable antes de la función click

Sería algo así:

Código Javascript :

var containerWidth;

$('#button').click(function() {
      containerWidth = $('#container').width();
   });

   console.log(typeof containerWidth, containerWidth);


Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 16 Jul 2013 04:26 pm
Pues creo que me estoy liando más... Es que todavía soy novato en js.

Sobre las variables dentro de la función, ¿porqué en 'containerWidth' pones que es local y en 'otra' que es global?

Y si necesitara acceder desde otra función al contenido de la variable local que está dentro de la función, ¿qué tendría que hacer? ¿O no se puede?


Muchas gracias.

Por walden

Claber

120 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2013 04:34 pm

SinSemilla escribió:

Código Javascript :

var containerWidth;

$('#button').click(function() {
      containerWidth = $('#container').width();
   });

   console.log(typeof containerWidth, containerWidth);


He probado este código y me sale 'undefined undefined'. ¿No tendría que salir el valor?

Por walden

Claber

120 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2013 04:54 pm
Esta indefinido, por que no le has asignado valor, el asigna valor cuando le hagas click. A eso era lo que hiba, Como JavaScript trabaja I/O, eso quiere decir que trabaja por eventos, le estas asignado el evento, Click a un Boton. Cuando ocurra ese evento va hacer asignado el valor.

Por alejonext

Claber

235 de clabLevel

2 tutoriales

Genero:Masculino  

artista

firefox
Citar            
MensajeEscrito el 16 Jul 2013 05:11 pm
No sé si os estoy entendiendo, pero para que salga el valor en la consola al hacer clic, tengo que poner 'console.log' dentro de la función. Si lo pongo fuera de la función sale 'undefined undefined'.

Código Javascript :

var containerWidth;

$('#button').click(function() {
      containerWidth = $('#container').width();
      console.log(typeof containerWidth, containerWidth);
   });


En tu ejemplo, alejonext, donde pones este código...

Código Javascript :

console.log( containerWidth); // 960
...a mí no se sale un número, sino undefined.

Por walden

Claber

120 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2013 05:16 pm
Pero tienes que ver los eventos, el evento 'console.log', se ejecuta primero que el de 'click'. Por eso te sale 'undefined'.

Nota: Si me equivoque en el codigo. Lo siento. Debe quedar dentro del evento.

Por alejonext

Claber

235 de clabLevel

2 tutoriales

Genero:Masculino  

artista

firefox
Citar            
MensajeEscrito el 16 Jul 2013 05:22 pm

walden escribió:

SinSemilla escribió:

Código Javascript :

var containerWidth;

$('#button').click(function() {
      containerWidth = $('#container').width();
   });

   console.log(typeof containerWidth, containerWidth);


He probado este código y me sale 'undefined undefined'. ¿No tendría que salir el valor?


No, porque al momento de ejecutarse el console.log(); todavía no le has asignado nada, puesto que no se ha llamado al evento click de #button...

En todo caso, el console.log() metelo dentro del click.

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 16 Jul 2013 05:48 pm
Creo que lo voy entendiendo...

Y en el ejemplo que estamos utilizando, ¿se puede decir que la variable 'containerWidth' local y la global son la misma variable?

Por walden

Claber

120 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Jul 2013 06:21 pm
Al iniciar, no tiene valor, le estas dado valor a la variable cuando le hagas click. En ese caso, es una variable Global.

Por alejonext

Claber

235 de clabLevel

2 tutoriales

Genero:Masculino  

artista

firefox
Citar            
MensajeEscrito el 16 Jul 2013 08:50 pm

walden escribió:

Creo que lo voy entendiendo...

Y en el ejemplo que estamos utilizando, ¿se puede decir que la variable 'containerWidth' local y la global son la misma variable?

Es lo mismo, pero no hay una variable global y una local.
Hay una variable global, que es llamada en una función.

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.