2012-10-27 5 views
5

मैं निम्नलिखित फ़ंक्शन पर फंस गया हूं जो कुछ अन्य पोस्टों में दिखाई देता है जिनकी मैंने समीक्षा भी की है।एलोक्वेंट जावास्क्रिप्ट की खोज पर्याप्तता स्पष्टीकरण

function findSequence(goal) { 
    function find(start, history) { 
    if (start == goal) 
     return history; 
    else if (start > goal) 
     return null; 
    else 
     return find(start + 5, "(" + history + " + 5)") || 
      find(start * 3, "(" + history + " * 3)"); 
} 
    return find(1, "1"); 
} 

print(findSequence(24)); 

इस लिंक में भी दिया गया।

Javascript..totally lost in this tutorial

ऊपर स्पष्टीकरण में, इस सवाल का जवाब बजाय 11 का एक लक्ष्य निर्धारित करने वे प्रारंभ की 1 है, जो पहले 11 के खिलाफ परीक्षण किया जाता है, और फिर 6 की एक शुरुआत है जो 11 के खिलाफ परीक्षण किया जाता है है की कोशिश की

मैं इन पहले दो चरणों को समझता हूं। हालांकि, मुझे दूसरे चरण से छलांग नहीं समझती है (start की तुलना: 6 से goal: 11) तीसरे चरण में (start की तुलना: 3 से goal: 11)।

start कैसे 6 से नीचे, 3 से नीचे, और फिर 11 (चौथी गोली) तक वापस जाता है?

+0

अंग्रेजी मेरी पहली भाषा है। –

+0

पोस्ट में यह स्पष्टीकरण बहुत उपयोगी है, इसलिए मैंने इसके बजाय लिंक प्रदान किया है। – KMcA

+1

इस उत्तर की जांच करें - शायद यह स्पष्ट कर सकता है। http://stackoverflow.com/questions/7540111/javascript-closure-tutorial-from-eloquent-javascript?lq=1 – c69

उत्तर

7

ठीक है, यहां कोड का एक संस्करण है जो कंसोल लॉग स्टेटमेंट के साथ बढ़ाया गया था। ओपन क्रोम/ओपेरा/फ़ायरफ़ॉक्स eveloper उपकरण और वहाँ इस कोड को निष्पादित करें:

function findSequence (goal) { 
    function find (start, history, depth) { 
    depth = depth || 0; 
    console.log(Array(++depth).join('--> '), start, goal, history); 
    if (start == goal) { 
     console.warn('history'); 
     return history; 
    } else if (start > goal) { 
     console.error('null'); 
     return null; 
    } else { 
     console.info('recursion!'); 
     return find(start + 5, "(" + history + " + 5)", depth) || 
      find(start * 3, "(" + history + " * 3)", depth); 
    } 
    } 
    return find(1, "1"); 
} 

console.info(findSequence(24)); 

आप इस कार्यक्रम के लिए एक कॉल ट्रेस मिल जाएगा, और उम्मीद है कि, प्रत्यावर्तन नेत्रहीन की अवधारणा को समझ जाएगा पता लगाने पर देख कर।

+0

मैं मानता हूं कि इससे उन्हें अवधारणा को समझने में मदद मिलेगी लेकिन उनकी टिप्पणियों से मैं कहूंगा कि उनका भ्रम' || 'में है। – pedrofurla

+0

यही वही है जो मुझे अपने प्रश्न को पूरी तरह से देखने और जवाब देने के लिए आवश्यक था। आपका बहुत बहुत धन्यवाद। – KMcA

+1

पेड्रोफुरला, इसलिए, बाएं तरफ अंततः शून्य हो जाता है, यह झूठा है, और शुरू करने के लिए दाएं तरफ ट्रिगर करता है। सही बात? – KMcA