[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/let [Back]  [Original]

let - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

let

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since setembro de 2016.

Declara uma varivel local no escopo do bloco atual, opcionalmente iniciando-a com um valor.

In this article

Sintaxe

Definio let:

let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];

Expresso let:

let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) expression;

Instruo let:

let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) statement;

Parmetros

Parameter Description
var1, var2, , varN Nome da varivel. Pode ser qualquer identificador vlido.
value1, value2, , valueN Valor inicial da varivel. Pode ser qualquer expresso vlida.
expression Qualquer expresso vlida.
statement Qualquer instruo vlida.

Descrio

let permite que voc declare variveis limitando seu escopo no bloco, instruo, ou em uma expresso na qual ela usada. Isso inverso da keyword var, que define uma varivel globalmente ou no escopo inteiro de uma funo, independentemente do escopo de bloco.

Nota: Nota do tradutor: o trecho acima: "independentemente do escopo de bloco", na verdade, significa dizer que variveis declaradas dentro de blocos internos da funo, por exemplo, so vinculadas no escopo da funo, no no bloco no qual elas so declaradas. Se isso parece confuso - e realmente -, apenas entenda que, ao contrrio do que se poderia supor, em Javascript blocos no possuem escopo como em outras linguagens, somente funes tm! Isso quer dizer que mesmo uma vriavel definida com a keyword var dentro de um bloco de instruo if, ser visvel no resto inteiro da funo.

Escopo de bloco

Variveis declaradas com let so "iadas" para comeo do bloco em que elas so definidas (isso conhecido tambm pelo termo, hoisting).

Redeclarao de uma mesma varivel num mesmo escopo de bloco causa um TypeError.

js
if (x) {
  let foo;
  let foo; // Emite um TypeError.
}

No entanto, corpos de funes no possuem essa limitao!

js
function do_something() {
  let foo;
  let foo; // Isso funciona.
}

Aviso: Ateno: Os rascunhos do ECMAScript 6 (desde abril de 2012) tornam este comportamento ilegal. Isso significa, provavelmente, que as futuras verses do JavaScript levantaro um TypeError. Ento, se voc faz isso, deveria evitar essa prtica!

Voc pode encontrar erros em instrues switch porque existe apenas um bloco subjacente.

js
switch (x) {
  case 0:
    let foo;
    break;

  case 1:
    let foo; // TypeError para a redeclarao.
    break;
}

Exemplos

Uma expresso let limita o escopo de uma varivel declarada somente para aquela expresso.

js
var a = 5;
let(a = 6) alert(a); // 6
alert(a); // 5

Usada dentro de um bloco, let limita os escopo das variveis para aquele bloco. Observe a diferena entre var em que o escopo definido dentro da funo onde declarada

js
var a = 5;
var b = 10;

if (a === 5) {
  let a = 4; // O escopo  dentro do bloco if
  var b = 1; // O escopo  dentro da funo

  console.log(a); // 4
  console.log(b); // 1
}

console.log(a); // 5
console.log(b); // 1

possvel usar a keyword let para vincular variveis localmente no escopo de loops em vez de usar uma varivel global (definida usando var) para isso.

js
for (let i = 0; i < 10; i++) {
  alert(i); // 1, 2, 3, 4 ... 9
}

alert(i); // i no est definida

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page