[DÚVIDA] Por que o javascript usa muito mais const do outras linguagens?

Venho estudando programação e começei por linguagens, como Delphi (que usa um tipo de pascal) e um pouco de C, que só vi na faculdade. Depois me aventurei um pouco por python e agora estou desbravando o mundo de javascript e uma coisa que me chamou muito a atenção foi o fato que de javascript tem var (antigo) e let (mais moderno) para declarar suas variáveis, mas tudo que é tutorial, vídeo aula, artigos e etc, o povo só usa const pra declarar o que em outras linguagens seria uma variável. Por que no javascript os desenvolvedores usam tanto o const ao invés de usar let?? qual o sentido de ter uma constante quando em outras linguagens o mais comum é usar variáveis deixando as constantes somente para o que realmente é constante??

Existem algumas questões aí.

O primeiro ponto é que muita gente ensina errado. Por isso muita gente aprednee errado, e cria um cículo vicioso. Muitas bvezes as pessoas não sabem bgem porque estão fazerndo algo. É o que eu sempre falo, a pessoa só decorou receitas de bolo, ela não aprenbder a programar.

Então muita gente usa const em algo que tem outra sintaxe que já é constante. Não faz sentido declarar um função anônima e guardar em uma constante, porque a função normal já é isto.

Outra questão é que Javascript não tem um readonly ou algo do tipo, então se algo não varia, a única forma de declarar um símbolo é como const. Outras linguagens tem isso mais bem definido, então só usa-se const onde realamente é algo constante e não apenas imutável, que parecem ser a mesma coisa, mas não são. Veja mais: https://pt.stackoverflow.com/q/151721/101.

Também tem o fato de em algumas linguagens tem a cultura de não usar muito a imutabilidade ou constância, fica tudo como variável. A ideia de declarar a capacidade de mutação só começou ser mais reforçada recententemente e as linguagens mais antigas o pessoal não usava muito, assim como começaram abusar em JS. Ao mesmo tempo algumas linguagens sequer tem qualquer coisa parecida com const.

Um outro ponto é que em JS se usa muito, até por cultura, mas nem sempre (novamente, tem caso spara usar e caso para não usar, mas as pessoas só seguem a receita de bolo), a criação se símbolos para acessar algum objeto existente, em geral do documento ou navegador e quase semrpe você quer que esse símbolo detenha o objeto o tempo todo, portanto é imutável, e por falta de opção melhor const é usado.

Isso pode dar algum ganho de desempenho, pode deixar o código mais curto e legível, mas pode acontecer o contrário se a pessoa não entender quando usar, por exemplo não faz sentido fazer isso para usar apenas uma vez, e vemos isso ocorrendo em JS muito. Mais uma vez, porque a pessoa não aprendeu a computação, não entende bem a linguagem, ou sobre linguagens de programação de forma geral, ela apenas decorou algumas coisas mecanicamente.

É óbvio que se você sabe que algo é imutável, então em JS é melhor usar const, não vai matar ninguém se não fizer assim, mas demonstra melhor a intenção. Inclusive que se tiver assim, é porque dificilmente deve mudar essa capacidade ao longo de todo o ciclo de vida do software, ou seja, se algo está sem mutação, mas é circunstancial, poderia ser variável, então é melhor deixar mutável.

Por último, const e let não funcionam em todos os navegadores, então quem usa isso limita seu público. Se o programador pode abrir mão dessas pessoas, ok, mas precisa saber que está fazendo isso.

Espero que agora as pessoas que estão lendo e não sabiam possam tomar melhores decisões (é claro que terá que estudar tudo para isso ocorrer de fato, não adianta tentar inventar mais um receita de bolo).


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

Uso de "const" em JS nao quer dizer que a variavel é imutavel, quer dizer que ela nao vai ter um re-assign, ou seja ela vai continuar tendo a mesma referencia de quando foi criada. Maioria das vezes eu uso const, pois nao vou mudar a referencia, entao fica muito mais facil de ler o codigo. poucas vezes eu uso let.
Discordo quando diz que let e const não funcionam em todos os navegadores, pois o suporte do `let` e `const` é de 97% (https://caniuse.com/?search=let) e do const. Se interpretada ao pé da letra, sua afirmação está correta, porém sabemos que esses 3% são insignificantes e representam aoenas alguns países nais retrogrados e sistemas legados, e não o usuário real da internet.
Um adendo: [aqui](https://www.tabnews.com.br/eliaseas/32015dbb-7974-4811-964c-8de0a8111378) você fala sobre uma fatia pesada do mercado o Zed não suportar Linux. Na data que publico isso, [Linux](https://gs.statcounter.com/os-market-share/desktop/worldwide) corresponde à 4,03% dos computadores de mesa.
Tudo depende do contexto. 4% dos computadores pessoais são Linux. Agora dê um zoom e me diga quantos porcento dos computadores de DESENVOLVEDORES (Público algo de uma IDE) usam linux? Se não me fala a memoria esse percentual é 30% segundo a pesquisa do stackoverflow. Se fizermos esse mesmo zoom no publico alvo do site/aplicativo que use const e let, pode ter certeza que na MAIORIA dos casos, esses 3% que não suportam o teu const/let somem.
Você discorda da matemática então. 3% não é insignificante, embora possa ser para seu caso, conforme eu disse, você tem o direito de abrir mão desses usuários, nem todo mundo tem esse poder, esse direito. O grande problema é que as pessoas acham que isso é normal, que pode dar um tapa na cara dessas pessoas, em alguns casos são pessoas em vulnerabilidade. A maioria das pessoas que ignoram essas pessoas nem percebem que estão ignorando, e pode estar perdendo quem pode fazer uma grande diferença.
Você faz um software para 97% dos computadores ou ele é tão bom que funciona em 99,9% deles? Pense nisso. Sempre que uma tecnologia nova é lançada na web, vão anos (ou décadas) para uma adoção completa. Bundlers/compilers de JS existem (também) para resolver este problema.
Está esquecendo dos pollyfills, que vão atender esses 3%, mesmo que jamais sejam usados.
Por gentileza poderia nos mostrar link desse polyfill?Eu gostaria de dar uma olhada no código fonte para saber como eles resolveram os problemas de sintaxe, semântica, escopo e hoisting que um polyfill dessa natureza provavelmente deva resolver.
Colega augusto, o polyfill é muito simples: ```js source = source.replace(/\b(let)\b/g, 'var'); ``` Espero ter ajudado! *//brincadeira*

Se não precisa ser alterada, é constante. Talvez não tenha ficado claro para você o que significa a palavra. O let você só usa quando o valor vai precisar ser alterado.

Eu também tenho essa dúvida. No início de meus aprendizados com essa linguagem, eu tinha um "preconceito" quanto ao JS, justamente por isso. Tudo colocam como constantemente. O significado de constante ficou confuso na minha cabeça após vê isso.

Outra coisa que me deixa bastante grilado no js é o tanto de funções anonimas atribuidas a variáveis (ou constantes) e o tanto de funções aninhadas que declaram. Eu aprendi a fazer funções na maioria dos casos para reúso do código, ai vou aprender js e me deparo com uma função declada dentro de outra função que já estava dentro de outra função. Me pergunto, pra quê? Onde vai reusar isso?

Hoje eu deixei de me sentir tão incomodado quanto a isso e só deixo passar. Mas ainda não entendo pq fazem isso no js.

Com o lançamento das keywords let e const e sua posterior ampla aceitação dentro dos browsers ou com uso de polyfills, os desenvolvedores rapidamente criaram a boa pratica de usar const sempre que possivel, let sempre que const falhar, e nunca usar var.

As diferenças entre elas já são amplamente conhecidas, mas de forma resumida, const e let tem escopo limitado ao bloco atual ({}) evitando sujar o namesce e gerar potenciais conflitos, consequentemente bugs em seu codigo por não se atentar ao escopo da variável.

Sendo bem direto ao ponto, usam e abusam do const por causa de como o javascript é utilizado e projetado internamente. Utilizamos muitos arrays e objetos. Se você criar um objeto com uma variável constante isso impedirá de você trocar o ponteiro para outro objeto, mas o objeto em si não é imutável, você consegue modificar ele como quiser.

Agora porquê outras linguagens de baixo nível não se utilizam disso? Simples, geralmente o const delas são em tempo de compilação e não em tempo de execução(estou me baseando no C para dar essa resposta). Geralmente elas tem outra variável que imitam o const do javascript, como o final no java e dart. Agora voltando ao assunto anterior, no C a variável const sempre terá o mesmo valor que você escreveu no código na hora de compilar, agora no javascript o const em qualquer momento você pode criar essa variável constante e passar uma referência, depois ela garantirá que você não consiga modificar a referência.

Entendeu? O const do javascript é muito utilizado em outras linguagens, só que com nome diferente e com umas pequenas modificações, como o final do java.

Não sei se a explicação ficou boa, minha didática é horrível.