No contexto de um script JavaScript numa página Web, considere o trecho a seguir. <script> function teste(x) { return (x / 2); } alert (teste); </script> É correto afirmar sobre esse script que:
- A)há um erro de sintaxe que impede sua execução;
Errada, porque o trecho está sintaticamente válido e pode ser executado sem impedimento.
- B)quando executado, exibe a definição da função teste;
Certa, porque alert recebe a referência da função e a converte para sua representação textual, exibindo sua definição.
- C)quando executado, exibe o valor 0;
Errada, pois o valor 0 só apareceria se a função fosse chamada com um argumento que levasse a esse resultado.
- D)quando executado, exibe o valor undefined;
Errada, porque undefined não é o retorno do alert nesse caso; o navegador exibe a função como texto.
- E)quando executado, o comando alert não é acionado.
Errada, pois o comando alert é acionado normalmente, apenas recebe a função como parâmetro.
Gabarito: B
Nesse script, a função teste(x) foi declarada normalmente e não há erro de sintaxe. O detalhe importante é que o comando alert recebeu o nome da função, e não uma chamada da função. Em JavaScript, quando você passa uma função como valor, ela é tratada como objeto e pode ser convertida para texto, exibindo sua representação em código-fonte. Ou seja: teste sozinha representa a própria função; teste() é que executaria a função e devolveria o resultado do return (x / 2). Como não houve execução, nenhum número foi calculado. O alert mostra a definição da função, que é exatamente o que torna o item B correto. Em linguagem de prova, vale lembrar essa diferença clássica entre referenciar e invocar uma função. É a velha armadilha do JavaScript: faltou os parênteses, e a função ficou só “apresentada”, não “trabalhando”.