Her zaman, JavaScript'in tek iş parçacıklı olduğundan, kod yürütmenin ortasındayken işleyicilerin çalıştırılmasından endişelenmeden olay işleyicileri ekleyebileceğimi düşündüm. Benim için sürpriz olabilirdi. this answer,'a göre 'Yanıt Vermeyen Komut Dosyası' iletişim kutusu, betik hala devam ederken olayların yükseltilmesine neden olabilir.JavaScript akışı akışı kesintiye uğrayabilir mi?
Aşağıdaki kod ile bu test:
<script>
function loop() {
var cond;
onblur = function (event) {
cond = false;
};
cond = true;
while (cond)
;
alert('loop exited!');
}
</script>
<button onclick="loop()">loop()</button>
Firefox 11.0, işlev baskılar devam tıkladıktan sonra "döngüden çıkılır". Döngü, yürütmeye izin verilen olaylar ile duraklatılmış gibi görünüyor. Bu, hedef iş parçacığının içeriğini geçici olarak değiştiren Unix signal,'a benzer. Fakat dış devletin değiştirilmesine izin verdiği için çok daha tehlikelidir.
Bu bir hata mı? Artık, JavaScript'in tek akış yürütme modeline bağlı olmamalı ve tüm komut dosyalarının yeniden giriş yapmamasını sağlamalı mıyım? Yoksa bunun olmasına izin veren büyük bir tarayıcıya rağmen takip etmeye değmez bir kusur mu?
Sanırım asıl soru şu olurdu: "standart ne için çağrı yapıyor". –
Bazı yerleşik davranışlarla ("alert()" vb.) Gerçekleşen "duraklama" nın, o anda çalışan işlevden "getiri" zorlayan yorumlayıcı biçimini aldığını düşünmek daha iyi olur. "duraklama" bittiğinde, yürütmeye devam edilir.Diğer bir ifadeyle, "duraklama" devam ederken fonksiyonun gerçekte geri döndüğünü düşünmek ve devam etmek için devam edilmeye devam edilir. Bu şekilde, olay işleme, olağan olay işleme gibi olduğu için çok daha anlamlı olur. – Pointy
Bir "yanıt vermiyor" komut istemi, tasarlamanız gereken normal bir şey değildir. Uygulamanız bozulduğunda kullanıcı bu diyaloglardan birini alır. Komut dosyanızı, "yanıtsız komut dosyası" isteminin gerçekleşmemesi için tasarlamalısınız ve daha sonra yeniden giriş hakkında endişelenmenize gerek kalmayacak. Bana bu komut isteminde büyük bir tarayıcının olaylara izin vermesine izin veren küçük bir hata olduğu görünmüyor, ancak kodunuzu düzeltmek için çok daha önemli olduğunu düşünüyorum, bu yüzden istem hiç oluşmaz ve bu asla bir sorun değildir. – jfriend00