Escopo da Função e Escopo do Bloco

Quando você declara uma variável dentro de uma função, a variável é vinculada dentro da função e você não pode acessá-la fora da função. var é a palavra-chave para definir uma variável para acessibilidade da função-escopo.

Agora, você pode perguntar, se ela dá um erro mesmo que você use let ou const, por que apenas var está associada ao escopo da função? A coisa é, let e const são usados para definir o escopo do bloco, e antes do ES6, o JavaScript não tinha escopo de bloco ou let e const.

Um escopo de bloco é a área dentro de if, switch condições ou for e while loops. Simplificando , sempre que você vê {curly brackets}, é um bloco.

Vejamos um exemplo:

Agora pode esperar que nenhum dos comandos de log funcione mas como pode ver não é o caso com var, variáveis definidas com var dentro de if, switch condições ou for e while loops podem ser acessados globalmente e fazem parte do escopo global e por isso é melhor usar let e const com eles.

Escopo léxico

Finalmente, atingimos o verdadeiro propósito deste post. Bem, eu poderia ter pulado a longa discussão sobre escopo, mas pessoalmente, eu não acho que você possa entender o escopo léxico sem conhecer os componentes chave que giram em torno dele.

Again, um ponto a ser lembrado: Javascript tem escopo léxico com funções escopo.

Em palavras simples, significa que o escopo infantil tem acesso às variáveis definidas no escopo dos pais. Por exemplo, se eu fosse definir uma função e declarar uma variável dentro dela e dentro da mesma função, definir outra função, então eu deveria ser capaz de usar essa variável dentro da função interna por causa do escopo léxico. Vejamos um exemplo:

Pode ser visto pelo exemplo, as variáveis declaradas em outerFunction() são acessadas por innerfunction(), isto é o escopo léxico.

O escopo das variáveis é definido pela sua posição no código. Para resolver variáveis, o JavaScript começa no escopo mais interno e busca até encontrar a variável que estava procurando. No exemplo acima, Javascript primeiro procura por variáveis dentro de innerFunction() e quando não a encontra, vai para fora i.e. outerFunction()

Oscopo léxicoéxico é melhor porque podemos facilmente descobrir o valor de uma variável a partir do código, enquanto no escopo dinâmico, o significado de uma variável pode mudar em tempo de execução, o que a torna complexa de entender.

Então, nós entendemos com sucesso o que é o escopo léxico, agora vamos olhar para os fechamentos onde o escopo léxico é realmente usado.

Deixe uma resposta

O seu endereço de email não será publicado.