Quantos programas JavaScript são executados para uma única página da web no navegador?
Os programas JavaScript consistem em instruções e declarações de função. Quando um programa JavaScript é executado, essas duas etapas ocorrem:
o código é verificado em busca de declarações de funções e todas as funções. A declaração é "executada" (criando um objeto de função) e uma referência nomeada a essa função é criada (para que essa função possa ser chamada de dentro de uma instrução)
as instruções são executadas (avaliadas) sequencialmente (como aparecem no código)
Por causa disso, issofunciona muito bem:
<script>
foo();
function foo() {
return;
}
</script>
Embora a função "foo" seja chamada antes de ser declarada, ela funciona porque a declaração da função é avaliada antes da instrução.
No entanto, issonão funciona:
<script>
foo();
</script>
<script>
function foo() {
return;
}
</script>
Um ReferenceError será lançado ("foo não está definido"). Isso leva à conclusão de que todo elemento SCRIPT dentro do código HTML da página da web representa um programa JavaScript separado e toda vez que o analisador HTML encontra um elemento SCRIPT, ele executa o programa dentro desse elemento (e, depois que o programa é executado, o analisador passa para o código HTML que segue o elemento SCRIPT).
Então, novamente, issofunciona:
<script>
function foo() {
return;
}
</script>
<script>
foo();
</script>
Meu entendimento aqui é que o objeto Global (que serve como objeto Variável no contexto de execução global) existe (e permanece) o tempo todo; portanto, o primeiro programa JavaScript criará o objeto de função e fará uma referência a ele; o segundo programa JavaScript usará essa referência para chamar a função. Portanto, todos os programas JavaScript (em uma única página da Web) "usam" o mesmo objeto Global e todas as alterações feitas no objeto Global por um programa JavaScript podem ser observadas por todos os programas JavaScript executados posteriormente.
Agora, observe isso ...
<script>
// assuming that foo is not defined
foo();
alert(1);
</script>
No caso acima, a chamada de alertanão irá executar, porque a instrução "foo ()" lança um ReferenceError (que interrompe todo o programa JavaScript) e, portanto, todas as instruções subseqüentes não são executadas.
No entanto, neste caso ...
<script>
// assuming that foo is not defined
foo();
</script>
<script>
alert(1);
</script>
Agora, a chamada de alertaé executado. O primeiro programa JavaScript lança um ReferenceError (e, como conseqüência, quebra), mas o segundo programa JavaScript é executado normalmente. Obviamente, o navegador relatará o erro (embora tenha executado programas JavaScript subsequentes, após o erro).
Agora, minhas conclusões são:
todo elemento SCRIPT no código HTML da página da web representa um programa JavaScript separado. Esses programas são executados imediatamente quando o analisador HTML os encontra.todos os programas JavaScript na mesma página da Web "usam" o mesmo objeto Global. Esse objeto Global existe o tempo todo (desde o momento em que a página da Web é buscada até a destruição da página). Os programas JavaScript podem manipular o objeto Global e todas as alterações feitas no objeto Global por um programa JavaScript podem ser observadas em todos os programas JavaScript subsequentes.se um programa JavaScript for interrompido (com a ocorrência de um erro), isso não impedirá a execução de programas JavaScript subsequentes.Verifique este post e me diga se eu entendi algo errado.
Além disso, não encontrei recursos que expliquem os comportamentos mencionados neste post e presumo que os fabricantes de navegadores devem ter publicado esses recursos em algum lugar; portanto, se você souber sobre eles, forneça os links para eles.