Birisi şaka Neyse o Chrome ve bir konuşma bunun büyük bir iş yapmazJavaScript Özyineleme İyileştirme
<html>
<script type="text/javascript">
function crash(){
for(i=0;i<5000000001;i++){
document.write(i);
}
}
</script>
<body onload="crash();">
</body>
</html>
şuydu tarayıcınızı çökmesine tasarlanmış bir HTML dosyası bir e-posta gönderdi tarayıcının yanıt vermemesine veya çökmesine neden olmadan, mümkün olduğunca hızlı bir şekilde 5.000.000.000 sayfaya ulaşması için kimin javascript yazabileceğini görmek için arkadaşça bir yarışma yarattı.
Chrome'da kullanılmak üzere tasarlanmıştır javascript aşağıdaki parça ile geldi.<html>
<script type="text/javascript">
function countToFiveBillion(counter, num){
if(num < 5000000000)
{
num++;
if(num % 18700 == 0){
counter.innerHTML = num;
setTimeout(function() {countToFiveBillion(counter, num)}, 1);
} else {
countToFiveBillion(counter, num);
}
}
}
function initiateCountDown()
{
var counter = document.getElementById("counter");
var num = +counter.innerHTML;
countToFiveBillion(counter, num);
}
</script>
<body onload="initiateCountDown();">
<div id="counter">0</div>
</body>
</html>
bu sadece krom aday olacağını nedeni krom bir stackoverflow yaratmaktan kaçınmak için setTimeout
çağrısı kullanarak olmam. (Ayrıca Chrome, tüm tarayıcılardan en çok çağıran aramalara olanak sağlar).
bana bu herhangi çabuk sayımı yapmak için herhangi bir yolu var mı? Bir taşmaya neden olan miktarın biraz artabileceğine inanıyorum (100'den az olsa bile) Tek şart, mümkün olduğu kadar çok sayıyı göstermesi gerektiğidir.
Geliştirilmiş Kod:
<html>
<script type="text/javascript">
var counter;
var num = 0;
function countToFiveBillion(){
if(num < 5000000000)
{
num++;
if(num % 18701 == 0){
setTimeout("countToFiveBillion()", 1);
counter.value = num;
} else {
countToFiveBillion();
}
} else {
counter.value = "number greater than 5 Billion";
}
}
function initiateCountDown()
{
counter = document.getElementById('counter');
countToFiveBillion();
}
</script>
<body onload="initiateCountDown();">
<input type="text" id="counter" value="0" />
</body>
</html>
- Yapılan sayım ve eleman globabl
- geri arama
JS woudl'da bir işlevin nasıl referans olarak geçeceğinden tam olarak emin değilim Sadece şu anda yaptığım gibi this.countToFiveBillion yapmak yerine? – msarchet
Küresel olarak değişkenleri bildirin, ardından setTimeout (countToFiveBillion, 1) 'ile setTimeout (..)' değiştirin. –
Ah evet, mantıklı geliyor – msarchet