1
resposta

Dúvida com a linguagem

Estou assistindo esse curso, mas estou tendo dúvidas no processo de execução do código Js. Até agora fiz a formação HTML e CSS e não tive problemas em entender os códigos, mas no caso de javascript vejo que é meio jogado o código nas aulas, por exemplo:

"A Função executa na linha 4 e depois precisa de uma constante que ta na linha 38". Pensei que o interpretador da linguagem lesse o código de cima para baixo ou estou errado??

1 resposta

Olá, Thiago! Tudo bem?

Poderia dar um exemplo dessa situação?

Falo isso porque depende. Você está certo no sentido de que o código é lido de cima para baixo, mas não necessariamente a ordem de execução é essa.

Veja bem, no JavaScript temos declarações de funções:

function digaOla() {
  console.log('Olá!');
}

E declaração de variáveis com a palavra-chave var:

var mensagem = 'Olá mundo!';

O código é sempre lido de cima para baixo. No momento de leitura, se houver no início da linha uma dessas palavras-chave (function e var), o JavaScript reserva um espaço de memória, basicamente criando esse dado, mesmo que não possua um valor definido (undefined).

Para evitar esse processo com variáveis, usamos o let e o const, e no caso de funções também podemos fazer com let e const + funções anônimas/arrow functions.

Como a condição para esse processo é a primeira palavra da linha ser var ou function, ao declarar uma função dentro de parênteses (function () {}) nós também evitamos que esse trecho seja executado fora de ordem.

Outro detalhe, especificamente sobre funções é: declaração é diferente de execução. Então quando declaramos uma função, estamos apenas alocando espaço em memória e criando uma referência (o nome da função, ou da variável) para podermos chamar ela futuramente.

Esses são alguns cenários, e envolvem conceitos avançados de JavaScript, vou deixar alguns materiais a seguir:

  • Hoisting - O processo de "elevar" uma linha para fora da ordem;
  • Scope - O escopo é como um "container" para certas linhas do seu código, delimitando acesso.

E outros termos que você pode pesquisar sobre:

  • Lexical Scope;
  • Dynamic Scope;
  • Clojures;

Mas não precisa se preocupar muito em entender completamente os conceitos, muito pelo contrário, se te confundir pode deixar para depois.

De toda forma, se você puder específicar o cenário, posso direcionar melhor!

Espero ter ajudado!