Se le llama ámbito de las variables al lugar donde estas están disponibles.
Por lo general, cuando declaramos una variable hacemos que esté disponible en el
lugar donde se ha declarado, esto ocurre en todos los lenguajes de programación
y como javascript se define dentro de una página web, las variables que
declaremos en la página estarán accesibles dentro de ella. De este modo, no
podremos acceder a variables que hayan sido definidas en otra página. Este es el
ámbito más habitual de una variable y le llamaremos a este tipo de variables
globales a la página, aunque no será el único, ya que también podremos declarar
variables en lugares más acotados.
Variables globales
Como hemos dicho, las variables globales son las que están declaradas en el
ámbito más amplio posible, que en Javascript es una página web. Para declarar
una variable global a la página simplemente lo haremos en un script, con la
palabra var.
<SCRIPT>
var variableGlobal
</SCRIPT>
Las variables globales son accesibles desde cualquier lugar de la página, es
decir, desde el script donde se han declarado y todos los demás scripts de la
página, incluidos los manejadores de eventos, como el onclick, que ya vimos que
se podía incluir dentro de determinadas etiquetas HTML.
Variables locales
También podremos declarar variables en lugares más acotados, como por ejemplo
una función. A estas variables les llamaremos locales. Cuando se declaren
variables locales sólo podremos acceder a ellas dentro del lugar donde se ha
declarado, es decir, si la habíamos declarado en una función solo podremos
acceder a ella cuando estemos en esa función.
Las variables pueden ser locales a una función, pero también pueden ser locales
a otros ámbitos, como por ejemplo un bucle. En general, son ámbitos locales
cualquier lugar acotado por llaves.
<SCRIPT>
function miFuncion (){
var variableLocal
}
</SCRIPT>
En el script anterior hemos declarado una variable dentro de una función, por lo
que esa variable sólo tendrá validez dentro de la función. Se pueden ver cómo se
utilizan las llaves para acotar el lugar donde está definida esa función o su
ámbito.
No hay problema en declarar una variable local con el mismo nombre que una
global, en este caso la variable global será visible desde toda la página,
excepto en el ámbito donde está declarada la variable local ya que en este sitio
ese nombre de variable está ocupado por la local y es ella quien tiene validez.
<SCRIPT>
var numero = 2
function miFuncion (){
var numero = 19
document.write(numero) imprime 19
}
document.write(numero) imprime 2
</SCRIPT>
Un consejo para los principiantes podría ser no declarar variables con los
mismos nombres, para que nunca haya lugar a confusión sobre qué variable es la
que tiene validez en cada momento.
Diferencias entre utilizar var o no
Como hemos dicho, en Javascript tenemos libertad para declarar o no las
variables con la palabra var, pero los efectos que conseguiremos en cada caso
serán distintos. En concreto, cuando utilizamos var estamos haciendo que la
varible que estamos declarando sea local al ámbito donde se declara. Por otro
lado, si no utilizamos la palabra var para declarar una variable, ésta será
global a toda la página, sea cual sea el ámbito en el que haya sido declarada.
En el caso de una variable declarada en la página web, fuera de una función o
cualquier otro ámbito más reducido, nos es indiferente si se declara o no con
var, desde un punto de vista funcional. Esto es debido a que cualquier variable
declarada fuera de un ámbito es global a toda la página. La diferencia se puede
apreciar en una función por ejemplo, ya que si utilizamos var la variable será
local a la función y si no lo utilizamos, la variable será global a la página.
Esta diferencia es fundamental a la hora de controlar correctamente el uso de
las variables en la página, ya que si no lo hacemos en una función podríamos
sobreescribir el valor de una variable, perdiendo el dato que pudiera contener
previamente.
<SCRIPT>
var numero = 2
function miFuncion (){
numero = 19
document.write(numero) imprime 19
}
document.write(numero) imprime 2
llamamos a la función
miFuncion()
document.write(numero) imprime 19
</SCRIPT>
En este ejemplo, tenemos una variable global a la página llamada numero, que
contiene un 2. También tenemos una función que utiliza la variable numero sin
haberla declarado con var, por lo que la variable numero de la funcion será la
misma variable global numero declarada fuera de la función. En una situación
como esta, al ejecutar la función se sobreescribirá la variable numero y el dato
que había antes de ejecutar la función se perderá.