\n\n\nQuando carregada, essa página exibe:","inLanguage":"pt-BR","eduQuestionType":"Multiple choice","acceptedAnswer":{"@type":"Answer","text":"A) O resultado é ... 400. Aqui a questão mistura JavaScript com a lógica do bloco try/catch/finally. O ponto principal é simples: o comando eval() interpreta a string como código JavaScript. Então, em vez de tratar \"(a+b)*c\" como texto, ele calcula mesmo a expressão.\n\nNo código, a = 12 e b = 8, logo c = a + b = 20. Depois, eval(\"(a+b)*c\") vira (12+8)*20, que resulta em 400. Como não ocorre erro, o bloco catch nem entra em ação.\n\nO detalhe mais importante está no finally: esse bloco sempre executa, tenha dado erro ou não. Então ele pega o conteúdo já colocado em innerHTML, que é 400, e monta a frase \"O resultado é ... 400\". É o clássico \"sempre passa para arrumar a casa\" do finally.\n\nPor isso, o gabarito é a alternativa A. Em JavaScript, try/catch/finally funciona assim: catch trata exceções, mas finally executa obrigatoriamente ao final. E o eval, embora seja perigoso e desaconselhado em código real por questões de segurança e manutenção, aqui faz exatamente o cálculo esperado."},"suggestedAnswer":[{"@type":"Answer","text":"B) O resultado é ... abc*+"},{"@type":"Answer","text":"C) resultado é ... false"},{"@type":"Answer","text":"D) O resultado é ... true"},{"@type":"Answer","text":"E) O resultado é ... undefined"}]}← Questões de Programação

Programação · FGV · 2023

Questão comentada de Programação

Analise o código a seguir. <!DOCTYPE html> <html> <body> <p id="e2"><span id="e1"></p> <script> let a = 12; let b = 8; let c = a+b; try { let xpto = eval("(a+b)*c"); document.getElementById("e1").innerHTML = xpto; } catch(err) { document.getElementById("e1").innerHTML = undefined; } finally { document.getElementById("e1").innerHTML = "O resultado é ... " + document.getElementById("e1").innerHTML; } </script> </body> </html> Quando carregada, essa página exibe:

Gabarito: A

Aqui a questão mistura JavaScript com a lógica do bloco try/catch/finally. O ponto principal é simples: o comando eval() interpreta a string como código JavaScript. Então, em vez de tratar "(a+b)*c" como texto, ele calcula mesmo a expressão. No código, a = 12 e b = 8, logo c = a + b = 20. Depois, eval("(a+b)*c") vira (12+8)*20, que resulta em 400. Como não ocorre erro, o bloco catch nem entra em ação. O detalhe mais importante está no finally: esse bloco sempre executa, tenha dado erro ou não. Então ele pega o conteúdo já colocado em innerHTML, que é 400, e monta a frase "O resultado é ... 400". É o clássico "sempre passa para arrumar a casa" do finally. Por isso, o gabarito é a alternativa A. Em JavaScript, try/catch/finally funciona assim: catch trata exceções, mas finally executa obrigatoriamente ao final. E o eval, embora seja perigoso e desaconselhado em código real por questões de segurança e manutenção, aqui faz exatamente o cálculo esperado.

Continue treinando

Questões relacionadas