मुझे यकीन नहीं है कि मेरे सिर में अभी इस सवाल को कैसे पूछना है, इसलिए मेरे साथ भालू। मैं एसिंक्रोनस प्रोग्रामिंग के लिए नया ब्रांड हूं, और मुझे लगता है कि सीखने का सबसे अच्छा तरीका थोड़ा जावास्क्रिप्ट पोंग गेम बनाना होगा। मैंने एक शूटबॉल() फ़ंक्शन के साथ शुरुआत की और बस एक और div के चारों ओर एक div उछाल दिया। मैं कैसे किया यह कुछ इस तरह से किया गया था:असिंक्रोनस जावास्क्रिप्ट रिकर्सन
function shootball(angle, speed){
angle = (angle/360.0)*2*Math.PI;
var ballmotion = setInterval(function(){
var nowx, nowy, minusY, plusX;
nowx = $("#ball").position().left;
nowy = $("#ball").position().top;
minusY = Math.sin(angle) * 4.0;
plusX = Math.cos(angle) * 4.0;
if(hitsWall(nowx+plusX, nowy-minusY)){
clearInterval(ballMotion);
shootball(newAngle(nowx+plusX, nowy-minusY), speed);
}
$("#ball").css("left", (nowx + plusX)).css("top", (nowy - minusY));
}, 10/speed);
}
मैं बड़ा अनावश्यक प्रत्यावर्तन का एक बड़ा प्रशंसक नहीं हूँ, लेकिन मैं सिर्फ इसे आज़माने के लिए करना चाहता था। लो और देखो यह ठीक तरह से काम करता है जैसा कि मैं उम्मीद करता हूं। लेकिन जैसे ही मैंने बाकी कार्यक्रम को पेश करना शुरू किया, यह मेरे लिए हुआ कि मेरे पास इस पुनरावर्ती प्रकृति से बचने का कोई तरीका नहीं था। तो मेरा सवाल: क्या जावास्क्रिप्ट किसी भी तरह से पहचानता है कि कॉलिंग "शूटबॉल" फ़ंक्शन स्पष्ट अंतराल को कॉल करने के बाद अनिवार्य रूप से समाप्त हो गया है? या क्या यह वास्तव में अनावश्यक सक्रियण रिकॉर्ड के साथ अपने ढेर को लोड कर रहा है? किसी भी विशेषज्ञता के लिए अग्रिम धन्यवाद, यह ड्रम हो सकता है।
आप ब्रेक पॉइंट सेट कर सकते हैं और कॉलस्टैक पर एक नज़र डालें;) –
यदि किसी फ़ंक्शन को अंतराल की तुलना में अधिक समय लगता है, तो _setInterval_ खराब हो सकता है, इसके बजाय _setTimeout_ का उपयोग करने पर विचार करें। साथ ही, मुझे यकीन है कि आप अभिव्यक्ति के बाहर अधिकांश फ़ंक्शन को स्थानांतरित कर सकते हैं ताकि प्रत्येक बार एक नया फ़ंक्शन इंस्टेंस नहीं बनाया जा सके। –
मुझे पूरी तरह से यकीन नहीं है लेकिन मेरा मानना है कि जब भी गेंद दीवार पर नहीं जाती है तो ढेर खाली हो जाता है। – aledujke