Pergunta

Notei que alguns scripts parecem ser chamados antes de outros em uma determinada página, fiquei imaginando, qual é a ordem específica de carregamento dos scripts?Na página antes dos scripts .js referenciados?Eles são executados em ordem do primeiro <script> mencionado até o último na página ou isso depende do navegador?Como alguém pode ter certeza de que um script específico será executado primeiro em uma página?

Foi útil?

Solução

Notei que alguns scripts parecem ser chamados antes de outros em um determinado página. Eu estava me perguntando: qual é a ordem específica de carregamento dos scripts?

Isso é definido pelo W3C em suas especificações de idioma. Para a especificação HTML 4.01 , por exemplo, é definida em Seção 18.2.4 Modificação dinâmica de documentos, item 1 .

In-page antes dos scripts .js referenciados?

Veja acima. Não, os scripts embutidos e vinculados são tratados de forma idêntica.

Eles são executados em ordem do primeiro ao último na página, ou isso depende do navegador?

As especificações exigem que sejam executados sequencialmente de cima para baixo. Você terá que encontrar um navegador que implemente a linguagem de acordo com as especificações. Não consigo pensar em nenhum agora que lide com tags SCRIPT de maneira diferente, mas tenho certeza de que é possível.

Outra coisa a considerar é a definição de "correr". Isso pode soar como análise semântica, mas não é. JavaScript, como qualquer linguagem de programação, é projetado para se comportar de acordo com os padrões. JavaScript é especificado na ECMA-262 5.1 Edition / junho de 2011 padrão para avaliar da esquerda para a direita na seção 7 Convenções lexicais. (Os finais de linha são tratados como o caractere mais à esquerda da próxima linha.) Este documento também fornece convenções para a ordem em que as instruções e outras operações são avaliadas, como instruções WHILE ou FOR.

Como alguém pode ter certeza de que um script específico será executado primeiro em uma página?

(1) Coloque-o no topo e (2) escolha um navegador que implemente a especificação do idioma.

No entanto, acho que pode haver algo mais por trás dessa pergunta. Se estiver tentando impedir a execução de um código inesperado, você terá que bloqueá-lo até que o manipulador de eventos ONLOAD registre que a página está completa. (Basta incluir suas operações em uma função ou envolvê-las com um IF para verificar se há um sinalizador booleano, ou seja, isLoaded sendo definido como verdadeiro por ONLOAD.) Então, quando o manipulador de eventos ONLOAD disparar, você pode iniciar as operações em sua própria programação, sem ter que se preocupar com coisas como objetos DOM não instanciados.

Outras dicas

Desde que nenhum script seja carregado dinamicamente ou marcado como assíncrono ou adiado, os scripts são executados ou avaliados na ordem encontrada na página.Portanto, os primeiros scripts encontrados são executados primeiro.

Um arquivo de script referenciado externamente que deve ser carregado fará com que toda a execução javascript posterior espere até que o arquivo referenciado externamente seja carregado, analisado e executado.

Portanto, a ordem de avaliação do javascript normal (não assíncrono, não diferido) é 100% determinada conforme a ordem em que é encontrada na página.

Por padrão, as tags script são baixadas e avaliadas sequencialmente conforme são encontradas em um documento HTML.

No entanto, se você usar os atributos async ou defer, a execução acontece depois que o download do script termina (async) ou depois que a página é carregada (adiar).

Os scripts são executados na ordem em que são avaliados no arquivo html, da mesma forma que você os leria de cima para baixo.

No entanto, async e defer podem substituir isso para navegadores que os têm implementados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top