SORU
9 ŞUBAT 2014, Pazar


Neden't setTimeout döngüm iptal değil mi?

Kaç kere konsol içine while açıklama konsolu Krom () bir milisaniye içinde bir değişken olabilir, ben hızlı bir şekilde bu parçacık doğrudan yazdım JavaScript: merak ettim

var run = true, i = 0;
setTimeout(function(){ run = false; }, 1);
while(run){ i  ; }

Sorun sonsuza kadar çalışır.
Neden bu ve nasıl çözebilirim? oluyor

CEVAP
9 ŞUBAT 2014, Pazar


Bu geri JavaScript bir iş parçacıklı doğası için geliyor1. Ne olur hemen hemen bu

  1. Değişkenleri atanır.
  2. Sana bir fonksiyonu, run = false ayarlamak için zamanlama. Bu çalışma planlanmıştırsonrageçerli işlev (ya da başka bir şeyi şu anda etkin) çalıştırın.
  3. Sonsuz döngü var ve geçerli işlev içinde kalmak.
  4. Sonsuz döngü sonraasla), setTimeout() geri yürütülür ve run=false.

Gördüğünüz gibi, setTimeout() bir yaklaşım burada alışkanlık iş. while bu durumda zaman kontrol ederek geçici bir çözüm olabilir, ama bu gerçek ölçüm kurcalamak olacak.

1En azından daha pratik amaçlar için tek iş parçacıklı olarak görebilirsiniz. Aslında bir çok adı var "olay döngü". Bu döngü tüm fonksiyonları idam edilene kadar sıraya alın. Eğer yeni bir fonksiyon sıra, bu sıra içinde, ilgili pozisyonda konur.Sonramevcut görevini tamamladı, motoru sıradan bir sonraki fonksiyon (örneğin, setTimeout() tarafından sunulan bir zamanlama bakımından ve yürütür. alır
Zamanın bir fonksiyonu olarak her noktada bir sonucu olarak yürütülür, böylece yürütme hemen hemen tek dişli yapma. Link aşağıda açıklanan etkinlikler için bazı istisnalar vardır.


Başvuru için:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • ModNation Racers H.Q.

    ModNation Ra

    31 Ocak 2010
  • StalkerJS

    StalkerJS

    15 HAZİRAN 2010