Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Variables
Ya conoces los tipos de datos más comunes en JavaScript. Sabes crear,
combinar y transformar numbers, strings y booleans. Pero, ¿qué podemos hacer
con esto? Hasta ahora, todo lo que has trabajado ha sido para uso inmediato.
Es decir, los nuevos valores que generamos deben ser inmediatamente
utilizados o se pierden. Sigue en tu consola el siguiente ejemplo:
Después de que una variable se ha definido, su nombre puede ser usado como
una expresión. El valor de esa expresión es el valor que la variable alberga
actualmente. Sigamos con el ejemplo anterior:
age
// retorna: Uncaught ReferenceError: age is not defined
// at <anonymous>:1:1
Cuando una variable apunta a un valor, eso no quiere decir que está ligada a
ese valor para siempre. De hecho, se llaman variables porque su valor puede
variar. El operador de asignación (=) se puede utilizar en cualquier momento en
variables existentes (declaradas con let o var) para desconectarlas de su valor
actual y apuntarlas a uno nuevo (identificadores declarados con const no se
pueden reasignar).
Nombrando Variables
En JavaScript, existen ciertas reglas para nombrar variables. Los nombres de
variables:
1. No pueden incluir espacios
2. No pueden ser palabras reservadas (o keywords), como la palabra var
3. No pueden comenzar con números, aunque sí pueden haber números
dentro del nombre (solo que no al comienzo)
4. No pueden contener signos de puntuación, con la excepción de los
signos $ y _
Además de estas reglas, existen una serie de "sugerencias" que debes tomar
en consideración a la hora de nombrar variables. Son "sugerencias" porque
JavaScript no te dará un error si no las sigues. Sin embargo, son "buenas
prácticas" de escritura de código que hacen que tu trabajo sea de mejor
calidad. Las sugerencias son:
x no es descriptivo age
Incrementar y Disminuir
Como programadora, muchas veces tendrás que incrementar o disminuir el
valor de una variable numérica por un cierto valor. Por ejemplo, puede que
tengas la variable score que registra el puntaje en un juego de fútbol. Cada vez
que alguien anote un gol, la variable score debe aumentar en 1. Esto lo puedes
hacer de la siguiente manera:
let score = 0;
score = score + 1;
score;
// retorna: 1
let score = 0;
score++;
score;
// retorna: 1
Lo mismo podemos hacer para disminuir el valor de una variable. Por ejemplo,
en un video juego puede que tengas una variable llamada lifePoints que
registra los "puntos de vida" de un jugador. El jugador parte con 100 puntos y
cada vez que un enemigo lo golpea, pierde 25 puntos. Cada vez que toma una
bebida regenera 10 puntos.
lifePoints += 10;
lifePoints
// retorna: 85
Lexical scoping
Si el ámbito está anidado dentro del ámbito directo de una variable, la variable
será accesible en todos los ámbitos:
function foo(arg) {
function bar() {
console.log(`arg: ${arg}`);
}
bar();
}
Shadowing (sombra)
Si un scope declara una variable que tiene el mismo nombre que otra en un
scope interno de una función, el acceso a la variable externa es bloqueado en
el scope interno y todos los scopes anidados dentro de ella. Cambios a la
variable interna no afecta a la variable externa, la cual es accesible
nuevamente cuando el scope interno es dejado. Ejemplo:
let x = 'global';
function f() {
let x = 'local';
console.log(x); // local
}
f();
console.log(x); // global
Alcance de variables
En cambio, las variables locales existen solamente dentro del cuerpo de una
función o bloque. El alcance local de una variable solo se define a partir del
cuerpo de la función o bloque que la contiene.
if (x > y) {
let gamma = 12.7 + y;
i = gamma * x;
}
(function () {
if (true) {
let x = 'hola mundo';
}
console.log(x);
// Da error, porque "x" ha sido definida dentro del "if"
})();
if (true) {
let x = 'Hola Joan';
}
console.log(x);
// Imprime en consola Hola Ale
})();
Veamos un ejemplo:
(function () {
const HELLO = 'hello world';
HELLO = 'hola mundo';
// Dará ERROR, ya que `HELLO` no puede ser reasignada
})();
(function () {
const PI;
PI = 3.15;
// Dará ERROR, ya que ha de asignarse un valor en la
declaración
})();
const USER = {
name: 'Caro',
surname: 'Covarrubias',
age: 20
};
/**
* La siguiente sentencia funciona, ya que estamos modificando
una propiedad
* del objeto, pero no el valor en sí, que es la referencia al
objeto, la cual
* no cambia.
**/
USER.name = 'Joan';