Atribuindo "deixe" um valor em Javascript


8

Eu estava brincando nas ferramentas do Chrome e tentei o seguinte código:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2

O código acima não funcionará se eu substituir "let" por "var".

Estou assumindo que let = 1é o mesmo que var let = 1. Em caso afirmativo, não deve let x = 2ser traduzido 1 x = 2e, portanto, deve ser um erro?


1
leté keyword, você não deve nomear (ou tentar nomear) variáveis ​​que. Estou surpreso que o Chrome até deixe (lol) você fazer isso.
Isick

Respostas:


10

Estou assumindo que let = 1é o mesmo quevar let = 1

Declara uma variável, mas não é a mesma. A maior diferença aqui é que ao omitir uma declaração como var, letou const, você está declarando esta variável globalmente * (supondo que você não está definindo uma variável previamente declarada). Isso é conhecido como um global implícito - um notório cheiro de código .

* Na maioria dos casos, "global" se refere ao windowobjeto, mas esse nem sempre é o caso. Por exemplo, o Node.js possui seu próprio globalobjeto de espaço para nome que se refere ao módulo atual.


Nesse caso, não deve let x = 2ser traduzido para1 x = 2 e, portanto, deve ser um erro?

No. let = 1não substitui a funcionalidade nativa da letdeclaração / palavra-chave. Você acabou de criar uma variável global com o mesmo nome. ( Talvez seja necessário dizer, mas não faça isso! )


E você não perguntou isso especificamente, mas vale a pena abordar:

Por que tenho permissão para fazer, let = 1mas nãovar = 1 ?

var é um palavra-chave reservada .

leté uma palavra-chave reservada futura , o que significa que atualmente ela está reservada apenas no modo estrito . Isso, se você estiver tentando escrever um código que resista ao teste do tempo, é melhor não usá-lo letcomo identificador. Como a MDN afirma no artigo vinculado, eu imagino que será uma palavra reservada mais cedo ou mais tarde.


Ótima explicação, muito obrigado! Eu não estava ciente dos diferentes tipos de palavras-chave.
Raisen

5

Compatibilidade com versões anteriores. leté relativamente novo, portanto, não é uma palavra-chave reservada para não quebrar scripts antigos usando-a como um nome de variável. É por isso que você pode usar letcomo um nome de variável e não var.

Estou assumindo que let = 1 é o mesmo que var let = 1.

Não. É igual a someothername = 1e cria uma variável global implícita que é muito ruim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.