क्या कोई समझा सकता है कि जब मैं पहले() को कॉल करने का प्रयास करता हूं तो नीचे दिया गया कार्य क्यों काम नहीं कर रहा है (मुझे अलर्ट दे रहा है), हालांकि जब मैं इसे किसी नए कॉन्स को असाइन करता हूं तो यह ठीक काम करता है?

const first = () => {
    const greet = "Hi";
    const second = () => {
        alert("greet");
    }
    return second; 
}

first() // does not work

const newFunc = first();
newFunc(); // works

क्या यह ES6 के लिए विशिष्ट है या क्या मुझे कुछ याद आ रहा है?

आप सभी को धन्यवाद! मेरे पास एक मस्तिष्क गोज़ था, मैं यह सोचकर नए सिंटैक्स पर ध्यान केंद्रित करता रहा कि मैंने कोई गलती की है या यह एक अलग तरीके से काम करता है, लेकिन मैं पहले वाले द्वारा लौटाए गए दूसरे फ़ंक्शन को कभी नहीं बुला रहा था। मैंने इसे बदल दिया:

const first = () => {
        const greet = "Hi";
        const second = () => {
            alert("greet");
        }
        return second; 
    }

    first()  

यह अब काम करता है!

-4
Aiden Campbell 28 मार्च 2018, 21:45

2 जवाब

सबसे बढ़िया उत्तर

first() ठीक काम करता है और second() फ़ंक्शन देता है, लेकिन मुझे नहीं लगता कि आपने इसकी उम्मीद की थी। और आप इसे इस्तेमाल करने की कोशिश करते हैं () और इस तरह इसे दूसरे फ़ंक्शन को वापस करने के लिए कहते हैं। उसके बाद newFunc में second होता है और इसे कॉल करने से आपको अपेक्षित परिणाम मिलता है।

0
Sebastian Speitel 28 मार्च 2018, 18:55

first() केवल एक फ़ंक्शन ऑब्जेक्ट देता है - इसलिए () का एक और सेट वास्तव में कॉल के लिए आवश्यक है जो फ़ंक्शन लौटाता है।

इसे const newFunc को असाइनमेंट की आवश्यकता नहीं है, हालांकि - first()(); आपको अलर्ट भी देगा।


किसी फ़ंक्शन के किसी अन्य फ़ंक्शन को वापस करने की यह तकनीक, या एक ऐसी वस्तु जो कई कार्यों को उजागर करती है जिसे बाद में कहा जा सकता है, को रिवीलिंग मॉड्यूल पैटर्न के रूप में जाना जाता है।

0
CBroe 28 मार्च 2018, 18:49