2012-06-08 16 views
10

क्या नाम स्वयं invoking समारोह का उपयोग करने का कोई कारण है?नामांकित स्वयं Invoking समारोह

उदाहरण के लिए

:

(function foo() 
{ 
    alert('Hello World! Named Self Invoking Function Here'); 
})(); 

जहाँ तक मेरी सीखने की मुझे ले लिया है, यह एक गुमनाम स्वयं प्रेरक फ़ंक्शन के रूप में ही कार्य करता है, बिना किसी अतिरिक्त लाभ के साथ (आप इसे फिर से invokation निम्नलिखित फोन नहीं कर सकते हैं) , और कोई अतिरिक्त नुकसान नहीं है क्योंकि यह वैश्विक दायरे को "प्रदूषित" नहीं करता है (मुझे लगता है)।

क्या कभी ऐसा होता है जब उपरोक्त की तरह एक स्वयं invoking समारोह नाम देने के लिए समझ में आता है?

+1

यह नामित फ़ंक्शन अभिव्यक्ति है, इसलिए नामित फ़ंक्शन अभिव्यक्तियों का उपयोग करने के किसी भी कारण लागू होते हैं। –

+3

कैनोनिकल उदाहरण रिकर्सन है: '(फ़ंक्शन फ़िब (एन) {वापसी n <= 2? N-1: fib (n-1) + fib (n-2);}) (7) ' – davin

+0

शायद क्योंकि कोड अंदर फ़ंक्शन नाम का उपयोग करता है? – MaxArt

उत्तर

10

आप एक पुनरावर्ती स्व-प्रेरक फ़ंक्शन की जरूरत है तो अर्थपूर्ण हो सकता है: मैं समय-समय पर सर्वर से मतदान डेटा के लिए इस पद्धति का उपयोग

(function loop(i) { 
    console.log(i); 
    i++; 
    if(i < 10) { 
     loop(i); 
    } 
})(0); 
+0

डेमो: http://jsfiddle.net/9xrvB/ मैंने इसे पहले नहीं देखा है। –

+0

और वैसे, वाई संयोजक के साथ इसे किसी फ़ंक्शन नाम दिए बिना हासिल किया जा सकता है। – penartur

+0

@penartur - क्या आपके पास डेमो है? –

5

। यह कोड कम अव्यवस्था बनाता है (विशेष रूप से setTimeout लाइन)।

(function poll() { 
    $.get("/somedata", function (data) { 
    // Processing data... 
    setTimeout(poll, 1000); 
    }); 
})(); 
+0

इसे प्यार करते हुए, धन्यवाद! – Dogoku

3

यह रिकर्सन के लिए उपयोगी होगा, लेकिन आपको समय के लिए नामित फ़ंक्शन एक्सप्रेशन से बचना चाहिए। वे संस्करण जब तक इंटरनेट एक्सप्लोरर में सही ढंग से समर्थित नहीं हैं 9.

देखें: http://javascript.info/tutorial/functions-declarations-and-expressions

"आईई < 9 एनएफई का समर्थन नहीं करता"

+0

यह "समर्थित नहीं" नहीं कहता है, यह कहता है "सही ढंग से लागू नहीं किया गया"। यदि आप quirks को जानते हैं और जानते हैं कि यह वास्तव में आपको प्रभावित नहीं करता है (जो ज्यादातर मामला है), तो आप अभी भी आईई को दुर्घटनाग्रस्त किए बिना उनका उपयोग कर सकते हैं। विषय पर अवश्य पढ़ना चाहिए: http://kangax.github.io/nfe/#jscript-bugs – Bergi

+0

@ बर्गि: मैंने "समर्थित नहीं" नहीं कहा, मैंने कहा "सही ढंग से समर्थित नहीं है"। यदि आप सुनना चाहते हैं, तो यहां निश्चित रूप से समर्थित और कार्यान्वित के बीच एक अंतर है, लेकिन यह सही ढंग से कार्यान्वित नहीं किया गया है इसका प्रभाव यह है कि यह सही ढंग से समर्थित नहीं है। – Guffa

+0

मेरी अंग्रेजी वाक्यांश किसी भी तरह से अलग होने के लिए बहुत खराब है, क्षमा करें: -/लेकिन मेरा मतलब यह नहीं था कि आपने क्या कहा, लेकिन आपने जो उद्धरण दिया था। – Bergi

0

आत्म लागू कार्यों नामकरण पठनीयता बढ़ा सकते हैं। उदाहरण के लिए यदि आप स्व-चालित कार्यों के माध्यम से कई बंदरगाह बना रहे हैं, तो नाम प्रदान करके यह किसी भी नुकसान पर कोड पठनीयता को बढ़ाता है (पुराने-आईई समर्थन को खोने के अलावा, जैसा कि उल्लेख किया गया है।) संक्षेप में, आप नाम कोड ब्लॉक बना रहे हैं, जो एक बड़े समारोह को तोड़ने का एक अच्छा तरीका हो सकता है। , कोड की लाइन आप पहली बार चलाने के लिए है और फिर इसे एक और स्क्रिप्ट कॉल करेंगे कि

जैसे

function bigFunction() { 
    (function doTheFirstThing() { 
     //code here. 
    })(); 
    (function doTheSecondThing() { 
    //code here. 
    })(); 
} 
+0

आईईएफई इसके लिए ओवरकिल लगते हैं। किसी अन्य टिप्पणी के लिए (* शायद [ब्लॉक] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference) के लिए आपको * बंद * आवश्यकताएं (स्कोपिंग/कचरा संग्रहण के लिए) की आवश्यकता है/वक्तव्य/ब्लॉक)) पर्याप्त होगा। – Bergi

+1

@ बेन रॉबर्ट्स कभी जावास्क्रिप्ट लेबल के बारे में सुना? –

0

आप प्रारंभ के लिए उपयोग कर सकते हैं।

संबंधित मुद्दे