Neden't setTimeout döngüm iptal değil mi? | Netgez.com
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

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • jbignacio

    jbignacio

    13 Mart 2006
  • Jonathan Flavell

    Jonathan Fla

    1 HAZÄ°RAN 2006