Lectura 2 - ECMAScript 6 (ES6)
Lectura 2 - ECMAScript 6 (ES6)
ECMAScript 6 (ES6) 1
¿Qué aprenderás? 2
Introducción 2
Alcance de variables declaradas let y var 3
Ejercicio guiado: Alcance de variables 6
Ejercicio propuesto (5) 8
Función Arrow 9
Ejercicio guiado: Arrow Functions 10
Ejercicio propuesto (6) 12
Comparativa entre ES5 y ES6 12
¡Comencemos!
_ 1
www.desafiolatam.com
¿Qué aprenderás?
Introducción
Hoy en día gran parte de los sistemas y plataformas que existen soportan ES6. En el
siguiente capítulo, aprenderás algunas de las características implementadas en ES6 como el
alcance de las variables declaradas y las funciones flecha, que nos permiten tener un mejor
control de nuestro código y optimizar la legibilidad del mismo
_ 2
www.desafiolatam.com
Alcance de variables declaradas let y var
Antes de ES6 sólo se podían declarar variable usando var las cuales al momento de ser
usadas dejaban a nuestras variables disponibles fuera del contexto o bloque donde son
declaradas, debido a que var tiene ambiente de función, esto significa que cuando se
ejecuta el código y se detecta una variable var, JavaScript la "eleva" (hoisting), ¿qué quiere
decir esto? mejor veámoslo con un ejemplo.
El interpretador de JavaScript al encontrarse con var i = 0 dentro del for la eleva dejando
el código así:
var i;
for(i = 0; i < 5; i++) {
console.log(i);
}
0
1
2
3
4
_ 3
www.desafiolatam.com
Si observas el último console.log nos retornó 7, lo que significa que la variable i sigue
disponible fuera del contexto del ciclo for donde fue declarada.
Veamos qué pasa entonces cuando ejecutamos un ciclo for anidado. ¿Qué pasa con los
valores de la variable i?:
Ciclo externo 0
Ciclo interno 0
Ciclo externo 1
Ciclo interno 1
Ciclo externo 2
Ciclo interno 2
Ciclo externo 0
Ciclo interno 0
Ciclo interno 1
Ciclo interno 2
Esto sucede porque la variable i al terminar el ciclo interior con i=2 se mantiene con el
mismo valor en la siguiente iteración del ciclo externo.
Con ES6 nace la definición de variables con la palabra protegida let que permite definir
variables que solo existen dentro del contexto o bloque donde se declaró. Revisemos los
mismos ejemplos anteriores pero usando let en vez de var y veamos la diferencia en sus
resultados.
_ 4
www.desafiolatam.com
console.log(i + 2);
0
1
2
3
4
Si observas bien, ahora el console.log fuera del ciclo for indica que "la variable i no se ha
definido" y esto es por que sólo existe dentro del contexto del ciclo for y no fuera de él.
Veamos otro ejemplo implementando la variable de tipo let con un ciclo for anidado (uno
dentro de otro), en donde se muestra mediante un “console.log()” la variable declarada en el
primer ciclo for como ciclo externo y luego mediante un “console.log()” la variable i
declarada en el for como ciclo interno .
Al utilizar let, el valor se mantiene dentro del contexto donde se encuentra. Por lo tanto, al
revisar el resultado del código anterior, encontraríamos lo siguiente:
Ciclo externo 0
Ciclo interno 0
Ciclo interno 1
Ciclo interno 2
Ciclo externo 1
Ciclo interno 0
Ciclo interno 1
Ciclo interno 2
Ciclo externo 2
Ciclo interno 0
Ciclo interno 1
Ciclo interno 2
_ 5
www.desafiolatam.com
Como se puede observar en el resultado, la variable i del primer ciclo for no interviene en la
variable i del segundo ciclo for, por esta razón, el implementar variables con let nos
garantiza que dichas variables sólo serán válidas en su contexto y no tendrán injerencia en
otro contexto, como por ejemplo, otro ciclo anidado.
function probando() {
var i = 10;
if(true) { // siempre entrará dentro del if por ser true su condición
let i = 30;
console.log(i)
}
console.log(i);
}
probando()
¿Cuál crees que es la respuesta y por qué? Veamos si respondiste correctamente, para eso
antes revisemos el resultado:
30
10
Usar let o var depende de cada situación y problema a resolver ya que en algunos casos no
importará si la variable se mantiene fuera del bloque, pero hay otros en que sí y en ese caso
debemos usar let para definir.
Desarrollar un código en JavaScript que permita calcular la suma y la resta de dos números
por funciones separadas, pero manteniendo el mismo nombre de las variables en ambas
operaciones.
Además, los datos ingresados por el usuario se deben guardar en variables separadas
dentro de cada función con el mismo nombre para las variables. Sigamos los siguientes
pasos:
_ 6
www.desafiolatam.com
● Paso 1: En el archivo funciones.js, se debe armar la estructura de las funciones, una
para la suma y otra para la resta, ambas funciones no van a recibir ningún tipo de
datos, por lo tanto, en la función para la suma se crearán dos variables con “let”
(num1 y num2) para guardar los números solicitados al usuario (variables locales),
así mismo se realizará la suma de ambos números y se retornará con el resultado.
La variable para almacenar el resultado de la suma y resta debe ser inicializada fuera
de las funciones con var (siendo una variable global), quedando la función de suma
de la siguiente forma:
function suma() {
let num1 = prompt("Ingrese un primer número para al suma");
let num2 = prompt("Ingrese un segundo número para al suma");
resultado = parseInt(num1) + parseInt(num2);
return resultado;
};
function resta() {
let num1 = prompt("Ingrese un primer número para al resta");
let num2 = prompt("Ingrese un segundo número para al resta");
resultado = parseInt(num1) - parseInt(num2);
return resultado;
};
● Paso 3: Para finalizar el ejercicio, solo se debe crear la variable para el resultado de
manera global y hacer el respectivo llamado a ambas funciones:
function suma() {
let num1 = prompt("Ingrese un primer número para al suma");
let num2 = prompt("Ingrese un segundo número para al suma");
resultado = parseInt(num1) + parseInt(num2);
return resultado;
};
function resta() {
let num1 = prompt("Ingrese un primer número para al resta");
let num2 = prompt("Ingrese un segundo número para al resta");
_ 7
www.desafiolatam.com
resultado = parseInt(num1) - parseInt(num2);
return resultado;
};
var resultado;
document.write(`El resultado de la suma es: ${suma()} <br>`);
document.write(`El resultado de la resta es: ${resta()}`);
Al ejecutar el código anterior, el resultado obtenido dependerá del valor ingresado por el
usuario. Por ejemplo, si el usuario ingresa los números 4 y 6 para la suma, mientras que para
la resta ingresa 5 y 11 el resultado sería:
Por ende, se puede apreciar que hemos utilizado la variable “resultado” con un “var” fuera de
la función y la podemos referenciar dentro de las funciones sin la necesidad de volver a
declararla, pero en cambio, las variables num1 y num2 dentro de las funciones sí se deben
volver a declarar.
Lee los siguientes códigos, y sin ejecutarlo, interpreta ¿cuál es el valor de i al ejecutarse la
sentencia console.log(i) al final del código?
let i = 0;
while(i < 10) {
i++;
}
console.log(i)
function recorrer() {
let i = 0;
while(i < 10) {
i++;
}
}
recorrer();
_ 8
www.desafiolatam.com
console.log(i)
Función Arrow
Con ES6 también nacen las arrow functions que es una forma simplificada de escribir o
definir una función, incluso el poder tener una función en una sola línea de código. Veamos
unos ejemplos:
function miFuncionSumar(a,b) {
return a + b;
}
console.log(miFuncionSumar(1,2))
Resultado:
Ahora con ES6 podemos escribir funciones eliminando la palabra function y usando =>, esto
transformaría la función del ejemplo anterior en:
console.log(miFuncionSumar(1,2));
Resultado:
Para practicar, escribe una función de la forma tradicional y luego conviértela a una arrow
function. Por ejemplo, la función anterior denominada miFuncionSumar la podemos
reescribir de la siguiente manera, implementando ES6 arrow functions:
_ 9
www.desafiolatam.com
let miFuncionSumar = (a,b) => a + b;
Pero al ser una función de una sola sentencia podemos omitir las { }.
En el siguiente código, se solicita al usuario ingresar un número entero para enviarlo como
argumento en el llamado a la función y recibirlo como parámetro para poder comparar el
valor mediante una estructura condicional.
Realizar la transformación a funciones flecha o arrow de ES6
function verificar(numero) {
if (numero > 0) {
resultado = "positivo";
} else if (numero < 0) {
resultado = "negativo";
} else if (numero === 0) {
resultado = "nulo";
} else {
resultado = "no es un número";
}
return resultado
}
_ 10
www.desafiolatam.com
● Paso 1: Para transformar el código anterior a funciones arrow de ES6, lo primero que
debemos observar es la estructura actual, en este caso, la función tiene parámetros y
distintos procesos dentro de ella, por lo tanto, se deben utilizar los paréntesis
“(parametro1...)” y las llaves “{proceso}” para separar los procesos dentro de la
función original, agregando la flecha después del parámetro:
_ 11
www.desafiolatam.com
línea, es decir, se trabaja con las llaves, el return debe ir dentro de la función
obligatoriamente si se desea retornar algún valor.
A continuación, veremos una tabla con las principales diferencias entre la versión ES5 y ES6.
_ 12
www.desafiolatam.com