Iniciante: Javascript deve estar no cabeçalho para executar? Será que a ordem de declaração das funções importa?

votos
0

Eu tenho essa função na minha cabeça:

<head>
      window.onload = function(){
         var x = new Array(0,2,3,4,5,6,7,8);
         var y = new Array(20,10,40,30,60,50,70,10);  
         drawGraph(y,x);
      }
</head>

Posso declarar a função DrawGraph () em algum lugar no corpo? Preciso declará-lo antes que ele é chamado?

Publicado 09/12/2008 em 19:45
fonte usuário
Em outras línguas...                            


3 respostas

votos
5

A ordem não importa. Você precisa ter a função DrawGraph () declarou antes de ser chamado.

Respondeu 09/12/2008 em 19:50
fonte usuário

votos
0

Você deve ser capaz de ter a drawGraphfunção em qualquer lugar do documento porque ele não é chamado até que o documento está completamente carregado. Isso significa que quaisquer <script>etiquetas já deveria ter sido analisado e executado.

Enquanto ordem não importa, como você declarar funções também é importante. Se você usar a sintaxe de declaração, ...

function identifier ( arglist ) { body }

... então ele vai existir antes que o script é executado mesmo independentemente de onde no script que você declarou que (não tenho certeza se este é o padrão para todos os intérpretes, mas parece aplicar-se dentro do Firefox, Chrome e Internet Explorer) . No entanto, isso só se aplica a uma única <script>tag. Declarações em outras marcas de script não existirá até que esses scripts são analisados, que é depois de roteiros anteriores foram executados.

<html>
    <head>
        <script type="text/javascript">
            function check_existance()
            {
                if(!check_existance.i)
                    check_existance.i = 0;

                document.write("<h5>Call : " + ++check_existance.i + "</h5>" +
                      "func1 : " + typeof func1 + "<br />" +
                      "func2 : " + typeof func2 + "<br />" +
                      "func3 : " + typeof func3 + "<br />" +
                      "func4 : " + typeof func4 + "<br />");
            }
        </script>
        <script type="text/javascript">
            check_existance();

            func1 = function()
                    {
                        alert("func1");
                    };

            check_existance();

            function func2()
            {
                alert("func2");
            }
        </script>
    </head>
    <body>
        <script type="text/javascript">
            check_existance();

            func3 = function()
                    {
                        alert("func3");
                    };

            check_existance();

            function func4()
            {
                alert("func4");
            }
        </script>
    </body>
</html>

Saída:

Chamada: 1
func1: indefinido
func2: função
FUNC3: indefinido
Func4: indefinido

Chamada: 2
func1: função
func2: função
FUNC3: indefinido
Func4: indefinido

Chamada: 3
func1: função
func2: função
FUNC3: undefined
Func4: function

Chamada: 4
func1: função
func2: função
FUNC3: função
Func4: function

Acredito YSlow recomenda <script>etiquetas ser colocado na parte inferior do documento (acho que precede o fechamento </body>tag) por causa da maneira como eles são carregados nos navegadores.

Respondeu 29/09/2009 em 19:58
fonte usuário

votos
0

Tenha em mente que muitas plataformas web já usam o método window.onload, e devido ao fato de que window.onload pode ser chamado apenas uma vez, você pode ter uma colisão script. Você pode considerar usando um método diferente para carregar o seu script que constrói o window.onload ou aguarda o carregamento da página para ser concluído.

Um exemplo sem usar um framework JavaScript como jQuery seria algo como:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = func;
    } 
    else {
      window.onload = function() {
        oldonload();

        var x = new Array(0,2,3,4,5,6,7,8);
        var y = new Array(20,10,40,30,60,50,70,10);  
        drawGraph(y,x);
      }
    }
}

Um exemplo usando JQuery seria algo como:

  $(document).ready(function() {
    var x = new Array(0,2,3,4,5,6,7,8);
    var y = new Array(20,10,40,30,60,50,70,10);  
    drawGraph(y,x);         
  })
Respondeu 03/03/2009 em 22:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more