Considere a execução do código JavaScript abaixo, compatível . . .

brand logo

Exercício 5 de 10


Ano: 2019 Banca: COVEST-COPSET Órgão: UFPE Disciplina/Assunto: Engenharia de Software / Javascript

📌 Considere a execução do código JavaScript abaixo, compatível com o ECMAScript 6, e a respectiva numeração das linhas de código na coluna à esquerda, e assinale a alternativa correta.

var a = 5;
var b = 10;
if(a === 5){
  let a = 4;
  var b = 1;
  console.log(a);
  console.log(b);
}
console.log(a);
console.log(b);

Após a execução do código, desconsiderando os caracteres de quebra de linha da função console.log(), o console apresentará:

brand logo

Resolução 5 de 10


Parte 1 da resolução

Primeiramente devemos entender que existe uma diferença entre as declarações de variáveis em Javascript, usando var e let. Veja abaixo a diferença entre cada tipo de declaração:

  • let vs var
    • let permite que você declare variáveis limitando seu escopo no bloco, instrução, ou em uma expressão na qual ela é usada. Isso é inverso da keyword var, que define uma variável globalmente ou no escopo inteiro de uma função, independentemente do escopo de bloco. Variáveis declaradas com let são "içadas" para começo do bloco em que elas são definidas (isso é conhecido também pelo termo, hoisting).

    • Declarações de variáveis, onde quer que elas ocorram, são processadas antes que qualquer outro código seja executado. O escopo de uma variável declarada com var é seu contexto atual em execução, o qual é a função a qual pertence ou, para variáveis declaradas fora de qualquer função, o escopo é o global. Como as declarações de variáveis (e declarações em geral) são processadas antes de qualquer código seja executado, declarar uma variável em qualquer lugar no código é equivalente a declarar no início. Isso também significa que uma variável pode aparecer para ser usada antes dela ser declarada. Esse comportamento é chamado de "hoisting", a variável é movida para o início da função ou do código global.

Parte 2 da resolução

O segundo conceito que devemos aprender para chegarmos a solução do problema é: O Javascript permite redeclarar uma variável com o mesmo nome, sendo que irá prevalecer o último valor atribuído à variável de mesmo nome, conforme demonstrado no exemplo abaixo.

var a = 1;
var a = 2;
var b = 1;
console.log(a+b);

O comando console.log(a+b); irá imprimir 3 pois a soma realizada foi do último valor atribuído a variável "a" com o valor atribuído a variável "b", ou seja, dois mais um resultando em três.

Parte 3 da resolução

Para chegarmos a resposta Letra A, o console apresentará as saídas 4, 1, 5 e 1. Perceba que o programa Javascript descrito no enunciado da questão possui dois escopos, o do próprio programa e o escopo relacionado ao bloco do comando if.

  • O primeiro comando console.log(a); imprimirá o valor 4, pois a variável let a = 4 dentro do escopo do comando if terá precedência sobre o que foi declarado no escopo do programa.

  • O segundo comando console.log(b); imprimirá o valor 1, pois foi atribuído 1 a variável do contexto do programa, pelo comando var b = 1;

  • O terceiro comando console.log(a); imprimirá o valor 5, pois fora do escopo do bloco if a declaração let a = 4; não é usada, mas sim a declaração do escopo do programa var a = 5;

  • O quarto e último comando console.log(b); imprimirá o valor 1, pois primeiro prevalecerá a última declaração var b = 1; e a variável b é do escopo do programa e não do bloco if.

Para exemplificar a última impressão do programa do enunciado do exercício, perceba que o programa simplificado abaixo imprimirá 1 pois var b = 1; apesar de estar sendo atribuído dentro do escopo do if pertencente ao escopo do programa.

var a = 5;
if(a === 5){
var b = 1;
}
console.log(b);

exerciciosresolvidos.com.br

Acreditamos na educação gratuita e de qualidade. Nos ajude com sua opinião, sugestão ou crítica : exerciciosresolvidosbr@gmail.com

Copyright © 2021. Built with ❤ Love