Başlangıç: JavaScript çalıştırmayı başlığına olmalıdır? fonksiyonların beyan sırası önemli mi?

oy
0

Kafamda bu işlevi vardır:

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

Ben fonksiyon DrawGraph vücutta () yere ilan edebilir? o çağrılmadan önce bunu bildirmek gerekiyor mu?

Oluştur 09/12/2008 saat 19:45
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
5

Sipariş önemli değil. Sen denir önce DrawGraph () fonksiyonu deklare olması gerekir.

Cevap 09/12/2008 saat 19:50
kaynak kullanıcı

oy
0

Sen sahip olmak gerekir drawGraphbelge tamamen yüklenene kadar denir çünkü dokümanın herhangi bir yerine işlevi. Bu, herhangi bir anlamı <script>etiketleri zaten ayrıştırılır ve idam edilmiş olmalıdır.

Sipariş önemi var olsa da, işlevlerini bildirmek nasıl da önemlidir. Eğer beyan sözdizimi kullanırsanız, ...

function identifier ( arglist ) { body }

... sonra komut bile bakılmaksızın komut bunu deklare nerede yürütülür önce (bu bütün tercümanlar için standart olup olmadığından emin değilim, ama Firefox, Chrome içinde geçerli gibi görünüyor, ve Internet Explorer) var olacaktır . Ancak, bu sadece tek bir geçerli <script>etiketi. Bu komut önceki çalýþtýrýlmaz sonra hangi ayrıştırıldı kadar diğer komut etiketleri beyanları mevcut olmayacaktır.

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

Çıktı:

Çağrı: 1
FUNC1: tanımsız
FUNC2: function
FUNC3: tanımsız
func4: tanımsız

Çağrı: 2
fonk1: function
FUNC2: function
FUNC3: tanımsız
func4: tanımsız

Çağrı: 3
fonk1: function
FUNC2: function
FUNC3: tanımlanmamış
func4: function

Çağrı: 4
FUNC1: function
FUNC2: function
FUNC3: function
func4: function

Ben YSlow önerir inanıyoruz <script>etiketler belgenin altına (I kapanış önceki tahmin yerleştirilmelidir </body>yolu onlar tarayıcılarda yüklenir çünkü etiketi).

Cevap 29/09/2009 saat 19:58
kaynak kullanıcı

oy
0

Birçok web platformları zaten window.onload yöntemi kullanmak unutmayın, ve window.onload yalnızca bir kez çağrılabilir gerçeği nedeniyle, bir komut dosyası çarpışma olabilir. Sen window.onload kurar veya sayfa yükleme tamamlamak için bekler Senaryonu yüklenmesi için farklı bir yöntem kullanmayı düşünebilirsiniz.

gibi görünecektir JQuery gibi bir JavaScript framework kullanmadan bir örnek:

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

gibi görünecektir JQuery kullanarak bir örnek:

  $(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);         
  })
Cevap 03/03/2009 saat 22:27
kaynak kullanıcı

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