2016-07-05 6 views
7

मैंने देखा है Iife की लिखित:तुरंत आमंत्रित अभिव्यक्ति अभिव्यक्ति: कोष्ठक कहां रखा जाए?

(function() { 
    console.log("do cool stuff"); 
})(); 

के साथ-साथ:

(function() { 
    console.log("do more cool stuff"); 
}()); 

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

+0

इससे कोई फर्क नहीं पड़ता। "मुझे बताया गया है कि एक तरफ सही है और दूसरा गलत है, इसके विपरीत" --- यह सिर्फ स्वाद का विषय है। – zerkms

उत्तर

8

संक्षिप्त उत्तर: इससे कोई फर्क नहीं पड़ता, जब तक आप उन्हें वहां रखते हैं।

लंबा उत्तर: इससे कोई फर्क नहीं पड़ता, क्योंकि जावास्क्रिप्ट के लिए केवल एक महत्वपूर्ण बात यह है कि वे वहां हैं। इसका कारण यह है कि भाषा का नमूना परिभाषित करता है कि यदि आप नाम फ़ंक्शन घोषित करते हैं तो एक कथन केवल function कीवर्ड से शुरू होना चाहिए। इसलिए, यह इस तरह एक Iife परिभाषित करने के लिए कल्पना के खिलाफ है:

function() {}(); 

वैकल्पिक हल इस के लिए कोष्ठक में पूरी बात रैप करने के लिए, ताकि बयान अब function कीवर्ड के साथ शुरू नहीं करता है। आप

(function() {})(); 

के साथ-साथ उपयोग करके का उपयोग करके इस लक्ष्य को हासिल:

(function() {}()); 

कौन सा आप चुनते हैं पूरी तरह से मनमाने ढंग से और इसलिए आप पर निर्भर है।

मैं (व्यक्तिगत रूप से), समारोह के आसपास कोष्ठक डाल कॉल, यानी की तरह इस एक के आसपास नहीं:

(function() {})(); 

कारण: मैं कुछ है कि में लिपटे होने के लिए कोड के सबसे छोटे हिस्से का उपयोग करना चाहते हैं केवल तकनीकी कारणों के लिए जरूरी है, और यह फ़ंक्शन परिभाषा है, कॉल नहीं। इसके अलावा spec का कहना है कि आप को इस तरह से फ़ंक्शन को परिभाषित नहीं कर सकते हैं, यह फ़ंक्शन को कॉल करने के बारे में नहीं है। इसलिए, मुझे लगता है कि यदि आप परिभाषा को लपेटते हैं, तो कॉल नहीं तो यह अधिक स्पष्ट है।

+0

... और एक लंबा जवाब? – zerkms

+0

मेरे विचार बिल्कुल, हाहा, एक लंबा जवाब पसंद करेंगे। –

+0

जोड़ा गया, मैंने * सहेजें * बहुत जल्दी क्लिक किया था। इसके लिए खेद है :-( –

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