किसी ने मजाक में आपके ब्राउज़र निम्नलिखितजावास्क्रिप्ट Recursion सुधार
<html>
<script type="text/javascript">
function crash(){
for(i=0;i<5000000001;i++){
document.write(i);
}
}
</script>
<body onload="crash();">
</body>
</html>
था कि दुर्घटना करने का इरादा html फ़ाइल के साथ एक ईमेल भेजा फिर भी यह क्रोम और एक बातचीत में इसके बारे में एक बहुत अच्छा काम नहीं करता है यह उठने के लिए कि यह ब्राउज़र को उत्तरदायी या दुर्घटनाग्रस्त होने के कारण जितनी जल्दी हो सके 5,000,000,000 तक पृष्ठ गिनने के लिए जावास्क्रिप्ट लिख सकता है, यह देखने के लिए एक दोस्ताना प्रतिस्पर्धा तैयार की गई।
मैं क्रोम में उपयोग किए जाने वाले जावास्क्रिप्ट के निम्न टुकड़े के साथ आया था।
<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>
कारण यह है कि यह केवल क्रोम में चलेंगे कि मैं setTimeout
कॉल उपयोग कर रहा हूँ क्रोम में एक stackoverflow बनाने से बचना है। (क्रोम आपको सभी ब्राउज़रों में से रिकर्सिव कॉल के लिए सबसे बड़ा ढेर भी देता है)।
क्या इस गिनती को किसी भी तेज बनाने के लिए मेरे पास कोई रास्ता है? मुझे लगता है कि मैं ओवरफ्लो (हालांकि कहीं 100 से कम) का कारण बनने से पहले थोड़ा सा गिनती राशि बढ़ा सकता हूं, केवल एक ही शर्त है कि जितना संभव हो उतना संख्या प्रदर्शित करना है।
बेहतर कोड:
<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>
- बनाया गिनती और तत्व globabl
- पाठ में इनपुट div के बजाय स्विचड
- को अद्यतन यूआई ले जाया कॉलबैक
मुझे बिल्कुल यकीन नहीं है कि जेएस वाउडल में संदर्भ के रूप में फ़ंक्शन को कैसे पास किया जाए, मैं बस इस countToFiveBillion को जिस तरीके से कर रहा हूं उसके बजाय मैं कर रहा हूं? – msarchet
वैश्विक रूप से चर घोषित करें, फिर 'setTimeout (..)' को 'setTimeout' (countToFiveBillion, 1) 'से प्रतिस्थापित करें। –
आह हाँ, समझ में आता है – msarchet