अनाम जावास्क्रिप्ट फ़ंक्शन के लिए शब्द क्या है जिसे तुरंत कहा जाता है?


29

मैं अपनी टीम के लिए एक जावास्क्रिप्ट शैली-गाइड लिख रहा हूं, ताकि हम अपने दस्तावेज़ों को व्यवस्थित और आसान बना सकें। लेकिन मैंने एक छोटा सा टक्कर मारा है, जहां मेरा सवाल लागू होता है ...

मैं एक अनाम जावास्क्रिप्ट फ़ंक्शन को कॉल करने वाला हूं जिसे तुरंत कहा जाता है। मुझे पता है कि मैं इसे बस एक "अनाम फ़ंक्शन" कह सकता हूं, लेकिन मैं इस तथ्य पर जोर देना चाहूंगा कि इसे तुरंत बुलाया जा रहा है।

यहाँ एक उदाहरण है:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
ध्यान दें कि आप अक्सर इस निर्माण (गलत तरीके से) को "स्व-कॉलिंग फ़ंक्शन" के
AakashM

जवाबों:


39

उनके पास जावास्क्रिप्ट दुनिया में पहले से ही एक शब्द है। उन्हें तत्काल आमंत्रित समारोह अभिव्यक्तियाँ (IIFE) कहा जाता है ।

यह क्या है

IIFE फ़ंक्शंस को एक नाम नहीं दिया गया है। इसके बजाय, उन्हें एक बार निष्पादित किया जाता है क्योंकि दुभाषिया उनके पार आता है:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

अंतिम कोष्ठक कोड ब्लॉक के समापन घुंघराले ब्रेस के बाद समारोह अभिव्यक्ति तुरंत कॉल करने के लिए दुभाषिया बताओ।

यदि आप एक फ़ंक्शन डिक्लेरेशन लिखते हैं, तो आपको फंक्शन के आसपास ग्रुपिंग ऑपरेटर , या कोष्ठक जोड़ना चाहिए , दुभाषिया को फंक्शन को एक ऐसी अभिव्यक्ति के रूप में मानने के लिए कहें जिसे तुरंत लागू किया जा सकता है:

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


जब उनका उपयोग किया जाता है

IIFE का उपयोग कोड के लिए किया जाता है जिसे केवल एक कार्य के भीतर एक बार चलाने की आवश्यकता होती है, बजाय बार-बार बुलाए जाने के बजाय।

  1. एक तर्क के रूप में जब एक फ़ंक्शन कहा जाता है (मूल्यों की गणना करने के लिए, आदि)
  2. किसी प्रॉपर्टी के मूल्य को ऑब्जेक्ट पर असाइन करना।
  3. घटना संचालकों और श्रोताओं में।
  4. दो लिपियों के बीच टकराव को रोकने के लिए जो समान चर नामों का उपयोग कर सकते हैं। उन्हें कोड के रूप में एक अन्य स्क्रिप्ट में ड्रॉप करने के लिए रैपर के रूप में उपयोग किया जा सकता है जहां आपको यकीन नहीं है कि चर नाम समान हो सकते हैं।

एक नाइटपिक: आपके उदाहरण का उपयोग करते हुए var area = ..., आपको फ़ंक्शन पर "रैपिंग" कोष्ठक की आवश्यकता नहीं है, क्योंकि यह पहले से ही दाईं ओर होने के गुण से एक फ़ंक्शन अभिव्यक्ति है =। रैपिंग कोष्ठक केवल तभी आवश्यक होते हैं जब फ़ंक्शन को फ़ंक्शन डिक्लेरेशन (यानी अग्रणी के बिना var area = ...) के रूप में लिखा जाता है ।
एरिक किंग

@ EricKing क्या मैंने इसे सही किया?
लॉरेंस आइलो

यह अधिक लापरवाही से इन 'एक्सप्रेस फ़ंक्शंस' को कॉल करने में सक्षम हो सकता है
तनावपूर्ण

@ LawrenceAiello मैंने यह दिखाने के लिए एक संपादन जोड़ा कि मेरा क्या मतलब है। उम्मीद है कि यह अभी भी आपके लिए काम करता है।
एरिक किंग

एक संबंधित प्रश्न के रूप में, क्या आईआईएफई के तर्क को पारित करने का कोई कारण है जैसा कि प्रश्न दिखाता है? मैंने कभी भी इन्हें देखा है जैसे आप कैसे प्रदर्शित करते हैं - बिना किसी तर्क के (क्योंकि कोई भी तर्क स्थानीय चर हो सकता है)।
कैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.