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.

questionAnswers(4)

yourAnswerToTheQuestion