A exe…","text":"Considere o código Javascript exibido a seguir.\n\n\n\nA execução desse script provoca","inLanguage":"pt-BR","eduQuestionType":"Multiple choice","acceptedAnswer":{"@type":"Answer","text":"C) a exibição do valor 2.. Em JavaScript, a palavra-chave var não respeita escopo de bloco como acontece com let e const. Ou seja, quando você escreve var dentro de um bloco entre chaves, essa variável continua sendo a mesma variável da função ou do escopo global, sem criar uma nova versão só para o bloco. Resultado: o segundo var x = 2 não cria outro x, ele apenas reatribui o x já existente.\n\nNo código da questão, primeiro x recebe 10. Depois, dentro do bloco, x é atribuído a 2 usando novamente var. Como var tem escopo de função/global e sofre hoisting, o valor final de x ao chegar no alert é 2. Nada de mágica, nada de erro: o bloco não protege a variável como muita gente imagina.\n\nPor isso o gabarito C está correto: o script exibe 2. Se a questão tivesse usado let x = 2 dentro do bloco, aí sim haveria outra variável restrita ao bloco, e o comportamento poderia ser diferente. Mas com var, a regra é essa: blocos não criam escopo novo para ela."},"suggestedAnswer":[{"@type":"Answer","text":"A) a exibição do valor 10."},{"@type":"Answer","text":"B) a exibição do valor 12."},{"@type":"Answer","text":"D) um erro de execução."},{"@type":"Answer","text":"E) um erro de sintaxe."}]}← Questões de Programação

Programação · FGV · 2022

Questão comentada de Programação

Considere o código Javascript exibido a seguir. <script> var x = 10; { var x = 2; } alert( x); </script> A execução desse script provoca

Gabarito: C

Em JavaScript, a palavra-chave var não respeita escopo de bloco como acontece com let e const. Ou seja, quando você escreve var dentro de um bloco entre chaves, essa variável continua sendo a mesma variável da função ou do escopo global, sem criar uma nova versão só para o bloco. Resultado: o segundo var x = 2 não cria outro x, ele apenas reatribui o x já existente. No código da questão, primeiro x recebe 10. Depois, dentro do bloco, x é atribuído a 2 usando novamente var. Como var tem escopo de função/global e sofre hoisting, o valor final de x ao chegar no alert é 2. Nada de mágica, nada de erro: o bloco não protege a variável como muita gente imagina. Por isso o gabarito C está correto: o script exibe 2. Se a questão tivesse usado let x = 2 dentro do bloco, aí sim haveria outra variável restrita ao bloco, e o comportamento poderia ser diferente. Mas com var, a regra é essa: blocos não criam escopo novo para ela.

Continue treinando

Questões relacionadas