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 = 2
ser traduzido 1 x = 2
e, portanto, deve ser um erro?
javascript
Raisen
fonte
fonte
let
é keyword, você não deve nomear (ou tentar nomear) variáveis que. Estou surpreso que o Chrome até deixe (lol) você fazer isso.Respostas:
Declara uma variável, mas não é a mesma. A maior diferença aqui é que ao omitir uma declaração como
var
,let
ouconst
, 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
window
objeto, mas esse nem sempre é o caso. Por exemplo, o Node.js possui seu próprioglobal
objeto de espaço para nome que se refere ao módulo atual.No.
let = 1
não substitui a funcionalidade nativa dalet
declaraçã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:
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á-lolet
como identificador. Como a MDN afirma no artigo vinculado, eu imagino que será uma palavra reservada mais cedo ou mais tarde.fonte
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 usarlet
como um nome de variável e nãovar
.Não. É igual a
someothername = 1
e cria uma variável global implícita que é muito ruim.fonte