JavaScript let y const

ECMAScript 2015(ECMAScript 6)

ES2015 (ES6) añadió dos palabras clave importantes de JavaScript:letyconst。

Las variables declaradas con let solo son válidas dentro del bloque de código donde se encuentra el comando let.

const declara una constante de solo lectura; una vez declarada, el valor de la constante no se puede cambiar.

Antes de ES6, JavaScript solo tenía dos ámbitos:Variables globalesyVariables locales dentro de funciones。


Variables globales

El ámbito de las variables declaradas fuera de una función es global:

Ejemplos

var carName = "Volvo"; //Aquí se puede usar la variable carName function myFunction() { //Aquí también se puede usar la variable carName }

Pruébalo »

Las variables globales se pueden acceder desde cualquier lugar del programa JavaScript.


Variables locales

El ámbito de las variables declaradas dentro de una función es local (dentro de la función):

Ejemplos

//Aquí no se puede usar la variable carName function myFunction() { var carName = "Volvo"; //Aquí se puede usar la variable carName } //Aquí no se puede usar la variable carName

Pruébalo »

Las variables declaradas con var dentro de una función solo se pueden acceder dentro de la función; si no se usa var, son variables globales.


Ámbito de bloque en JavaScript (Block Scope)

Las variables declaradas con la palabra clave var no tienen la característica de ámbito de bloque; todavía se pueden acceder fuera de {}.

{ 
    var x = 2; 
}
// 这里可以使用 x 变量

Antes de ES6, no existía el concepto de ámbito de bloque.

ES6 puede usar la palabra clave let para implementar el ámbito de bloque.

Las variables declaradas con let solo son válidas dentro del bloque de código donde se encuentra el comando let{}dentro son válidas; fuera{}de él no se pueden acceder.

{ 
    let x = 2;
}
// 这里不能使用 x 变量

Redefinir variables

Usar la palabra clave var para volver a declarar variables puede causar problemas.

Volver a declarar una variable dentro de un bloque también vuelve a declarar la variable fuera del bloque:

Ejemplos

var x = 10; //Aquí se muestra x como 10 { var x = 2; //Aquí se muestra x como 2 } //Aquí se muestra x como 2

Pruébalo »

La palabra clave let puede resolver este problema, porque solo dentro del bloque de código donde se encuentra el comando let{}es válida.

Ejemplos

var x = 10; //Aquí se muestra x como 10 { let x = 2; //Aquí se muestra x como 2 } //Aquí se muestra x como 10

Pruébalo »

Compatibilidad del navegador

Internet Explorer 11 y versiones anteriores de navegadores no son compatibles con la palabra clave let.

La siguiente tabla enumera los números de versión mínimos en los que cada navegador es compatible con la palabra clave let.

Chrome 49 IE / Edge 12 Firefox 44 Safari 11 Opera 36
Mar, 2016 Jul, 2015 Jan, 2015 Sep, 2017 Mar, 2016

Ámbito en bucles

Usando la palabra clave var:

Ejemplos

var i = 5; for (var i = 0; i < 10; i++) { //Algún código... } //Aquí se muestra i como 10

Pruébalo »

Usando la palabra clave let:

Ejemplos

var i = 5; for (let i = 0; i < 10; i++) { //Algún código... } //Aquí se muestra i como 5

Pruébalo »

En el primer ejemplo, se usóvarla palabra clave, y las variables que declara son globales, tanto dentro como fuera del bucle.

En el segundo ejemplo, se usóletla palabra clave, y el ámbito de las variables que declara solo está dentro del bucle; las variables fuera del bucle no se ven afectadas.


Variables locales

Dentro de una función, al usarvaryletla palabra clave, las variables declaradas son algo similares.

Su ámbito eslocal:

// 使用 var
function myFunction() {
    var carName = "Volvo";   // 局部作用域
}

// 使用 let
function myFunction() {
    let carName = "Volvo";   //  局部作用域
}

Variables globales

Fuera de una función o fuera de un bloque de código, al usarvaryletla palabra clave, las variables declaradas también son algo similares.

Su ámbito esglobal:

// 使用 var
var x = 2;       // 全局作用域

// 使用 let
let x = 2;       // 全局作用域

Usar variables globales en código HTML

En JavaScript, el ámbito global es relativo al entorno de JavaScript.

En HTML, el ámbito global es relativo al objeto window.

Usandovarla palabra clave, las variables de ámbito global pertenecen al objeto window:

Ejemplos

var carName = "Volvo"; //Se puede acceder a la variable usando window.carName

Pruébalo »

Usandoletla palabra clave, las variables de ámbito global no pertenecen al objeto window:

Ejemplos

let carName = "Volvo"; //No se puede acceder a la variable usando window.carName

Pruébalo »

Reasignar variables

Usandovarla palabra clave, las variables declaradas se pueden modificar en cualquier lugar:

Ejemplos

var x = 2; //x es 2 var x = 3; //Ahora x es 3

Pruébalo »

En el mismo ámbito o ámbito de bloque, no se puede usarletla palabra clave para reasignarvarlas variables declaradas con la palabra clave:

var x = 2;       // 合法
let x = 3;       // 不合法

{
    var x = 4;   // 合法
    let x = 5   // 不合法
}

En el mismo ámbito o ámbito de bloque, no se puede usarletla palabra clave para reasignarletlas variables declaradas con la palabra clave:

let x = 2;       // 合法
let x = 3;       // 不合法

{
    let x = 4;   // 合法
    let x = 5;   // 不合法
}

En el mismo ámbito o ámbito de bloque, no se puede usarvarla palabra clave para reasignarletlas variables declaradas con la palabra clave:

let x = 2;       // 合法
var x = 3;       // 不合法

{
    let x = 4;   // 合法
    var x = 5;   // 不合法
}

letLa palabra clave se puede volver a declarar y asignar en diferentes ámbitos o diferentes ámbitos de bloque:

let x = 2;       // 合法

{
    let x = 3;   // 合法
}

{
    let x = 4;   // 合法
}

Elevación de variables

En JavaScript, las variables definidas con la palabra clave var se pueden declarar después de usarse, es decir, las variables se pueden usar antes de declararse (Elevación de variables en JavaScript)。

Ejemplos

//Aquí se puede usar la variable carName var carName;

Pruébalo »

Las variables definidas con la palabra clave let no se pueden declarar después de usarse, es decir, las variables deben declararse antes de usarse.

// 在这里不可以使用 carName 变量

let carName;

La palabra clave const

const se usa para declarar una o más constantes; deben inicializarse al declararse, y después de la inicialización el valor no se puede modificar:

Ejemplos

const PI = 3.141592653589793; PI = 3.14; //Error PI = PI + 10; //Error

Pruébalo »

constDefinir constantes es similar a usarletvariables definidas con:

  • Ambos tienen ámbito de bloque
  • Ambos no pueden tener el mismo nombre que otras variables o funciones en su ámbito

También hay dos diferencias entre ellos:

  • constLas constantes declaradas deben inicializarse, mientras queletlas variables declaradas no necesitan inicializarse.
  • El valor de una constante definida con const no se puede modificar mediante reasignación, ni se puede volver a declarar. Mientras que el valor de una variable definida con let sí se puede modificar.
var x = 10;
// 这里输出 x 为 10
{ 
    const x = 2;
    // 这里输出 x 为 2
}
// 这里输出 x 为 10

Las constantes declaradas con const deben inicializarse:

// 错误写法
const PI;
PI = 3.14159265359;

// 正确写法
const PI = 3.14159265359;

No son constantes reales

La esencia de const: las variables definidas con const no son constantes, no son inmutables; define una referencia constante a un valor. Los objetos o arrays definidos con const son en realidad mutables. El siguiente código no produce error:

Ejemplos

//Crear un objeto constante const car = {type:"Fiat", model:"500", color:"white"}; //Modificar propiedades: car.color = "red"; //Añadir propiedades car.owner = "Johnson";

Pruébalo »

Pero no podemos reasignar un objeto constante:

Ejemplos

const car = {type:"Fiat", model:"500", color:"white"}; car = {type:"Volvo", model:"EX60", color:"red"}; //Error

Pruébalo »

El siguiente ejemplo modifica una matriz constante:

Ejemplos

//Crear una matriz constante const cars = ["Saab", "Volvo", "BMW"]; //Modificar elementos cars[0] = "Toyota"; //Agregar elementos cars.push("Audi");

Pruébalo »

Pero no podemos reasignar una matriz constante:

Ejemplos

const cars = ["Saab", "Volvo", "BMW"]; cars = ["Toyota", "Volvo", "Audi"]; //Error

Pruébalo »

Compatibilidad del navegador

Internet Explorer 10 y versiones anteriores no admiten la palabra clave const.

La siguiente tabla enumera las versiones mínimas de los navegadores que admiten la palabra clave const.

Chrome 49 IE / Edge 11 Firefox 36 Safari 10 Opera 36
Mar, 2016 Oct, 2013 Feb, 2015 Sep, 2016 Mar, 2016

Reasignar variables

UsandovarLas variables declaradas con la palabra clave se pueden modificar en cualquier lugar:

Ejemplos

var x = 2; //Válido var x = 3; //Válido x = 4; //Válido

En el mismo ámbito o ámbito de bloque, no se puede usarconstla palabra clave para redeclararvaryletlas variables declaradas con la palabra clave:

var x = 2;         // 合法
const x = 2;       // 不合法
{
    let x = 2;     // 合法
    const x = 2;   // 不合法
}

En el mismo ámbito o ámbito de bloque, no se puede usarconstla palabra clave para redeclararconstlas variables declaradas con la palabra clave:

const x = 2;       // 合法
const x = 3;       // 不合法
x = 3;             // 不合法
var x = 3;         // 不合法
let x = 3;         // 不合法

{
    const x = 2;   // 合法
    const x = 3;   // 不合法
    x = 3;         // 不合法
    var x = 3;     // 不合法
    let x = 3;     // 不合法
}

constLa palabra clave se puede volver a declarar y asignar en diferentes ámbitos o ámbitos de bloque:

const x = 2;       // 合法

{
    const x = 3;   // 合法
}

{
    const x = 4;   // 合法
}

Elevación de variables

Las variables definidas con la palabra clave var de JavaScript se pueden declarar después de usarlas, es decir, las variables se pueden usar antes de declararse (Elevación de variables en JavaScript)。

Ejemplos

carName = "Volvo"; //Aquí se puede usar la variable carName var carName;

Pruébalo »

Las variables definidas con la palabra clave const no se pueden declarar después de usarlas, es decir, las variables deben declararse antes de usarse.

carName = "Volvo";    // 在这里不可以使用 carName 变量
const carName = "Volvo";
Otras extensiones