Αρχάριος: Η Javascript πρέπει να είναι στην κεφαλίδα για να τρέξει; Μήπως η σειρά δήλωσης των λειτουργιών σημασία;

ψήφοι
0

Έχω αυτή τη λειτουργία στο κεφάλι μου:

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

Μπορώ να κηρύξει τη λειτουργία drawGraph () κάπου στο σώμα; Χρειάζεται να το δηλώσει πριν αυτό ονομάζεται;

Δημοσιεύθηκε 09/12/2008 στις 19:45
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
5

Η σειρά έχει σημασία. Θα πρέπει να έχει η συνάρτηση drawGraph () δηλώνεται πριν να λέγεται.

Απαντήθηκε 09/12/2008 στις 19:50
πηγή χρήστη

ψήφοι
0

Θα πρέπει να είναι σε θέση να έχουν τη drawGraphλειτουργία οπουδήποτε στο έγγραφο, διότι δεν λέγεται, μέχρι το έγγραφο έχει τοποθετηθεί πλήρως. Αυτό σημαίνει ότι όλα τα <script>tags θα πρέπει να έχουν ήδη αναλυθεί και εκτελέστηκαν.

Ενώ η σειρά έχει σημασία, πώς θα κηρύξει λειτουργίες θέματα επίσης. Εάν χρησιμοποιείτε τη σύνταξη δήλωσης, ...

function identifier ( arglist ) { body }

... τότε θα υπάρξει πριν από το σενάριο έχει ακόμη εκτελεστεί ανεξάρτητα από τον τόπο στον σενάριο που δήλωσε (δεν είμαι σίγουρος αν αυτό είναι πρότυπο για όλους τους διερμηνείς, αλλά φαίνεται να εφαρμόζεται εντός του Firefox, Chrome και Internet Explorer) . Ωστόσο, ισχύει ότι μόνο με μία μόνο <script>ετικέτα. Δηλώσεις σε άλλες ετικέτες σενάριο δεν θα υπάρχει μέχρι αυτά τα σενάρια αναλυθεί, η οποία είναι μετά εκτελεστεί προηγούμενες σενάρια.

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

Παραγωγή:

Πρόσκληση: 1
func1: απροσδιόριστο
func2: Λειτουργία
func3: απροσδιόριστο
func4: απροσδιόριστο

Καλέστε: 2
func1: Λειτουργία
func2: Λειτουργία
func3: απροσδιόριστο
func4: απροσδιόριστο

Καλέστε: 3
func1: Λειτουργία
func2: Λειτουργία
func3: Απροσδιόριστος
func4: λειτουργία

Καλέστε: 4
func1: Λειτουργία
func2: Λειτουργία
func3: Λειτουργία
func4: Λειτουργία

Πιστεύω YSlow συνιστά <script>ετικέτες να τοποθετηθούν στο κάτω μέρος του εγγράφου (υποθέτω που προηγείται της λήξης </body>της ετικέτας) λόγω του τρόπου που φορτώνονται στα προγράμματα περιήγησης.

Απαντήθηκε 29/09/2009 στις 19:58
πηγή χρήστη

ψήφοι
0

Λάβετε υπόψη ότι πολλές διαδικτυακές πλατφόρμες που έχουν ήδη χρησιμοποιήσει τη μέθοδο window.onload, και λόγω του γεγονότος ότι window.onload μπορεί να κληθεί μόνο μία φορά, θα μπορούσατε να έχετε μια σύγκρουση σενάριο. Θα μπορούσε να εξετάσει τη χρήση διαφορετικής μεθόδου για τη φόρτωση script σας που χτίζει το window.onload ή περιμένει η φόρτωση της σελίδας για να ολοκληρωθεί.

Ένα παράδειγμα χωρίς τη χρήση ενός πλαισίου το JavaScript όπως JQuery θα μοιάζει με:

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

Ένα παράδειγμα με τη χρήση JQuery θα μοιάζει με:

  $(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);         
  })
Απαντήθηκε 03/03/2009 στις 22:27
πηγή χρήστη

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