Eu entendo por var
que leva esse nome - é variável, const
- é uma constante, mas qual é o significado por trás do nome let
, com escopos para o bloco atual? Deixe ser?
javascript
ecmascript-6
let
Vitaly Zdanevich
fonte
fonte
LET
. Pode haver exemplos de idiomas anteriores.LET
está descrito na página 7 do primeiro rascunho do manual, datado de maio de 1964, em pdf aqui .const
é uma referência de objeto constante ou imutável (somente leitura) em que o próprio objeto ainda é mutável. Por exemplo. Após a declaração / atribuiçãoconst foo = ['bar']
,foo.push('bat')
ainda seria legal, masfoo = ['bar', 'bat']
não é. Mas isso é muita digitação.Respostas:
Let é uma afirmação matemática que foi adotada pelas linguagens de programação iniciais, como Scheme e Basic. As variáveis são consideradas entidades de baixo nível não adequadas para níveis mais altos de abstração, portanto, o desejo de muitos designers de linguagem de introduzir conceitos semelhantes, mas mais poderosos, como Clojure, F #, Scala, onde
let
pode significar um valor ou uma variável que pode ser atribuída, mas não mudou , o que, por sua vez, permite ao compilador detectar mais erros de programação e otimizar melhor o código.O JavaScript teve
var
desde o início, então eles só precisavam de outra palavra-chave e apenas pediram emprestado de dezenas de outros idiomas quelet
já usam a palavra-chave tradicional o mais próximovar
possível, embora, no JavaScript,let
crie uma variável local do escopo do bloco.fonte
len('var') === len('let')
, o que significa que suas declarações se alinham muito bem no seu editor de qualquer maneira. Ainda não encontrei nada que sugira que isso foi deliberado, mas pode ser: a) visualmente agradável e mais legível, ou b) terrivelmente irritante para depurar se você misturar os dois (o que parece ser uma má ideia, mas eu também '' já vi isso feito).let
tem sido tradicionalmente usado para descrever uma constante, poislet C = the speed of light
o Javascript decidiu usar let para descrever uma variável com escopo não padrão e, ao mesmo tempo, introduzir outra palavra-chave para constantes.let
é próximovar
. Scala também não usa,let
então não vejo como isso é relevante.Eu acho que segue a tradição matemática. Em matemática, costuma-se dizer "seja x um número real arbitrário" ou algo assim.
fonte
Adicionando à resposta do exebook , o uso matemático da palavra-chave let também encapsula bem as implicações de escopo de
let
quando usado em Javascript / ES6. Especificamente, assim como o código ES6 a seguir não está ciente da atribuição entre chaves detoPrint
quando ele imprime o valor de'Hello World'
,let usado na matemática formalizada (especialmente a redação de provas) indica que a instância atual de uma variável existe apenas para o escopo dessa ideia lógica. No exemplo a seguir, x imediatamente ganha uma nova identidade ao inserir a nova idéia (geralmente esses são conceitos necessários para provar a idéia principal) e reverte imediatamente para o antigo x após a conclusão da subprova. Obviamente, assim como na codificação, isso é considerado um pouco confuso e, portanto, geralmente é evitado escolhendo um nome diferente para a outra variável.
Seja x assim e tão ...
Material de prova
Nova idéia {Seja x outra coisa ... prove alguma coisa} Conclua nova idéia
Prove a idéia principal com o x antigo
fonte
let
é disso que se trata.let
é tudo sobre escopo.let
me faz pensar em algo como isso acontecendo na mente do redator de código: "Ok, neste exato momentolet foo = bar
, mas ele pode voltar ao seu valor original ou deixar de existir. Isso é claramente ilustrado em os exemplos para escopo de bloco e redeclaring Variáveis em este W3Schools apresentação delet
. mais uma vez, não pretendendo trazer uma resposta científica de algum tipo, mas compartilhar isso mais como um dispositivo mnemônico para recordar quando eu quero usarlet
.toPrint
que existe apenas dentro do bloco e, em seguida, joga fora essa variável quando o bloco termina. E na saída, estamos de volta ao escopo externo, onde o interiortoPrint
não existe mais, portanto,console.log(toPrint)
refere-se ao externotoPrint
. Não é que nada seja ignorado, é apenas que aslet
variáveis têm vida útil definida por seu escopo.Ele faz exatamente o que
var
faz com uma diferença de escopo. Agora, ele não pode receber o nome,var
pois ele já foi usado.Portanto, parece que ele adotou o próximo melhor nome, que tem uma semântica em uma construção interessante no idioma inglês.
Em inglês, diz "Deixe meu animal de estimação ser um cachorro"
fonte
A$="HELLO WORLD"
). Os intérpretes envolvidos incluíam o Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 no CP / M, Applesoft BASIC e até BASCOM, o compilador MS BASIC no CP / M. VAX BASIC tinha LET, mas não exigia, pelo que me lembro. A memória estava fraca naquela época, e os 3 ou 4 caracteres extras do texto do programa por instrução fizeram a diferença, especialmente em programas "grandes".A possibilidade mais provável é que foi a escolha mais idiomática. Não é fácil falar, mas também intuitivo. Alguns poderiam argumentar, ainda mais que isso
var
.Mas acho que há um pouco mais de história nisso.
Da Wikipedia :
Gostaria de acreditar que isso também foi uma inspiração para o
let
Javascript.fonte
LET
no BASIC, de 1964.let
no JavaScript. Não completamente falso, na medida em que vai, mas sem qualquer significado real. (E de maneira alguma descartando a possibilidade de o uso de "let" por Scott também ter sido inspirado pelo BASICLET
.)Let usa um escopo limitado em nível de bloco mais imediato, enquanto var é escopo de função ou escopo global.
Parece que let foi escolhido com maior probabilidade porque é encontrado em muitas outras linguagens para definir variáveis, como BASIC, e muitas outras.
fonte
Eu acho que o endividamento do JavaScript para o Scheme é óbvio aqui. O esquema não apenas permitiu, mas permitiu valores *, let *, sintaxe let e valores let. (Veja, The Scheme Programming Language, 4ª Ed.).
((A escolha adiciona mais credibilidade à noção de que o JavaScript é Lispy, mas - antes de nos deixarmos levar - não é homoicônico.))))
fonte
Também poderia significar algo como "Lexical Environment Type or Tied". Me incomoda que simplesmente seja "deixe isto ser aquilo ". E deixar rec não faria sentido no cálculo lambda.
fonte