Principiante: Javascript deve essere su colpo di testa di correre? Ha l'ordine di dichiarazione delle funzioni importa?

voti
0

Ho questa funzione nella mia testa:

<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 dichiarare la funzione drawGraph () in qualche parte del corpo? Ho bisogno di dichiararlo prima di essere chiamato?

È pubblicato 09/12/2008 alle 19:45
fonte dall'utente
In altre lingue...                            


3 risposte

voti
5

L'ordine non importa. Avrete bisogno di avere la funzione drawGraph () dichiarata prima si chiama.

Risposto il 09/12/2008 a 19:50
fonte dall'utente

voti
0

Tenete a mente che molte piattaforme web utilizzano già il metodo window.onload, e per il fatto che window.onload può essere chiamato solo una volta, si potrebbe avere una collisione script. Si potrebbe considerare l'utilizzo di un metodo diverso per il caricamento dello script che costruisce il window.onload o attende il caricamento della pagina per il completamento.

Un esempio senza utilizzare un framework JavaScript come jQuery sarebbe simile:

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);
      }
    }
}

Un esempio utilizzando jQuery sarebbe simile:

  $(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);         
  })
Risposto il 03/03/2009 a 22:27
fonte dall'utente

voti
0

Si dovrebbe essere in grado di avere la drawGraphfunzione di qualsiasi parte del documento perché non è chiamato fino a quando il documento viene completamente caricato. Ciò significa che eventuali <script>modifiche dovrebbero essere già stati analizzati e giustiziati.

Mentre ordine non importa, come si dichiara funzioni che conta anche. Se si utilizza la sintassi di dichiarazione, ...

function identifier ( arglist ) { body }

... allora sarà esistere prima lo script viene eseguito, anche indipendentemente da dove nello script si dichiarò (non sono sicuro se questo è standard per tutti gli interpreti, ma sembra di applicare all'interno di Firefox, Chrome e Internet Explorer) . Tuttavia, si applica che solo per un singolo <script>tag. Non esisteranno le dichiarazioni di altri tag script fino a quando questi script vengono analizzati, che è dopo gli script precedenti hanno eseguito.

<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>

Produzione:

Chiamata: 1
func1: undefined
func2: funzione
FUNC3: undefined
Func4: undefined

Chiama: 2
func1: Funzione
func2: Funzione
FUNC3: undefined
Func4: undefined

Chiama: 3
func1: Funzione
func2: Funzione
FUNC3: undefined
Func4: la funzione

Chiama: 4
func1: Funzione
func2: Funzione
FUNC3: Funzione
Func4: function

Credo YSlow raccomanda <script>tag essere posizionati nella parte inferiore del documento (immagino che precede la chiusura </body>tag) a causa del modo in cui vengono caricati nei browser.

Risposto il 29/09/2009 a 19:58
fonte dall'utente

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