जावास्क्रिप्ट पुस्तकालयों में अग्रणी अर्धविराम क्या करता है?


156

कई जावास्क्रिप्ट पुस्तकालयों में मैंने शुरुआत में ही इस संकेतन को देखा:

/**
 * Library XYZ
 */
;(function () {
  // ... and so on

जबकि मैं "तुरंत निष्पादित फ़ंक्शन" सिंटैक्स के साथ पूरी तरह से सहज हूं

(function(){...})()

मैं सोच रहा था कि अग्रणी अर्धविराम क्या है। मैं इसके साथ आ सकता हूं कि यह एक बीमा है। यही है, अगर लाइब्रेरी को अन्य, छोटी गाड़ी कोड में एम्बेडेड किया गया है, तो यह "अंतिम विवरण यहां नवीनतम" प्रकार की गति से टकराता है।

क्या इसे कोई अन्य कार्यक्षमता मिली है?


जवाबों:


140

यह आपको सुरक्षित रूप से कई जावास्क्रिप्ट फ़ाइलों को एक में समाहित करने की अनुमति देता है, इसे एक HTTP अनुरोध के रूप में त्वरित सेवा प्रदान करने के लिए।


16
लेकिन यह आवश्यक नहीं होगा, अगर सभी फाइलों को सही तरीके से कोडित किया जाएगा, तो क्या यह होगा?
बोल्डव्यून डे

8
नहीं: आपके उदाहरण में, आपको मिलेगा (function(){...})()(function(){...})()
हारून दिगुल्ला

8
इसका मतलब है कि 'सही ढंग से कोडित' के साथ मेरा मतलब है कि प्रत्येक पुस्तकालय अर्धविराम अनुगामी की सही मात्रा के साथ समाप्त होता है ...
Boldewyn

6
यस बोल्डेन, लेकिन यह बस मामला नहीं है।
मैथियास ब्यनेंस

13
दो बुरी तरह से कोडित फाइलें सिर्फ इस तथ्य से फिट नहीं होंगी कि एक तीसरी फ़ाइल में यह गंदा फिक्स है। नतीजे में फाइल के बीच कॉनसैकटेटर अतिरिक्त अर्धविराम क्यों नहीं जोड़ सकता है?
दविद होर्वाथ 12

30

सबसे अच्छा जवाब वास्तव में प्रश्न में दिया गया था, इसलिए मैं सिर्फ स्पष्टता के लिए यहां लिखूंगा:

;तुरंत-आह्वान किए गए फ़ंक्शन अभिव्यक्तियों के सामने अग्रणी , त्रुटियों को रोकने के लिए होता है जब फ़ाइल को कॉन्टेक्ट करने के दौरान फ़ाइल में एक अभिव्यक्ति से युक्त फ़ाइल को ठीक से समाप्त नहीं किया जाता है ;

सबसे अच्छा अभ्यास अर्धविराम के साथ अपने भावों को समाप्त करना है, लेकिन प्रमुख अर्धविराम को एक सुरक्षा के रूप में भी उपयोग करें।


यदि आप रक्षात्मक अर्धविराम का उपयोग कर रहे हैं, तो अर्धविराम के साथ अपने भाव भी क्यों समाप्त करें? या तो आप प्रत्येक पंक्ति के अंत में अर्धविराम पर निर्भर होने का मौका लेते हैं, या आप रक्षात्मक अर्धविराम का उपयोग करते हैं। दोनों को करने से लोग गलत तरीके से निष्कर्ष निकालते हैं कि दोनों करने का एक कारण है। रक्षात्मक अर्धविराम का उपयोग करने की सलाह अच्छी है; सलाह भी की प्रत्येक आवृत्ति को बदलने के लिए "\n"के साथ ";\n"कोई मतलब नहीं है।
व्लादिमीर कोर्ना

4
@VladimirKornea: क्योंकि आप हमेशा केवल अपने पुस्तकालयों का उपयोग नहीं कर रहे हैं :)
jvenema

@jvenema मुझे नहीं पता कि आपको क्यों लगता है कि इससे कोई फर्क पड़ता है।
व्लादिमीर कोर्ना

6
क्योंकि आप अपने सम्मेलनों के बाद किसी और के कोड पर भरोसा नहीं कर सकते। कोड रक्षात्मक रूप से और फिर आपके पास नहीं है।
jvenema

1
@VladimirKornea आप के रूप में अच्छी तरह से रक्षात्मक के बारे में सोच सकते हैं, यदि आप चाहते हैं - यह किसी और के कोड के खिलाफ बचाव करता है जो हमेशा रक्षात्मक अर्धविराम से शुरू नहीं होता है।
नाथन हेंचि

26

सामान्य तौर पर, यदि कोई कथन (,, [, /, +, या -] के साथ शुरू होता है, तो एक मौका है कि इसे पहले कथन की निरंतरता के रूप में व्याख्या किया जा सकता है। /, +, और - से शुरू होने वाले कथन व्यवहार में काफी दुर्लभ हैं। , लेकिन (और [शुरुआत में असामान्य नहीं हैं, कम से कम जावास्क्रिप्ट प्रोग्रामिंग की कुछ शैलियों में बयान। कुछ प्रोग्रामर इस तरह के किसी भी बयान की शुरुआत में रक्षात्मक अर्धविराम लगाना चाहते हैं ताकि बयान जारी होने पर भी यह सही ढंग से काम करता रहे। इससे पहले कि यह संशोधित हो और पहले समाप्त किया गया अर्धविराम हटा दिया जाए:

var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate

स्रोत:

जावास्क्रिप्ट: निश्चित गाइड, 6 वें संस्करण


9

इसे एक प्रमुख अर्धविराम के रूप में जाना जाता है।

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


7

एक-एक लाइन जवाब कई जावास्क्रिप्ट फ़ाइलों को सुरक्षित रूप से समेटना है। अर्धविराम का उपयोग करने से कोई समस्या उत्पन्न नहीं होती है।

मान लीजिए कि आपके कई कार्य हैं:

आईआईएफई 1

(function(){
  // The rest of the code
})(); // Note it is an IIFE

IIFE 2

(function(){
   // The rest of the code
})(); // Note it is also an IIFE

संघटन पर ऐसा लग सकता है:

(function(){})()(function(){})()

लेकिन अगर आप फ़ंक्शन से पहले एक अर्धविराम जोड़ते हैं तो ऐसा लगेगा:

;(function(){})();(function(){})()

इसलिए जोड़कर ; , यह ध्यान रखता है यदि कोई अभिव्यक्ति ठीक से समाप्त नहीं हुई है।

उदाहरण 2

मान लें कि आपके पास एक चर के साथ एक जावास्क्रिप्ट फ़ाइल है:

var someVar = "myVar"

कुछ फ़ंक्शन के साथ एक और जावास्क्रिप्ट फ़ाइल:

(function(){})()

अब संघनन पर यह दिखेगा

var someVar = "myVar"(function(){})() // It may give rise to an error

एक अर्ध-उपनिवेश के साथ, ऐसा दिखेगा:

var someVar = "myVar";(function(){})()

4

जब आप जावास्क्रिप्ट कोड को छोटा करते हैं तो यह अच्छा है। यह अप्रत्याशित सिंटैक्स त्रुटियों को रोकता है।


जैसे क्या? निम्नलिखित कोड के लिए अर्धविराम का कोई महत्व है या क्या यह सिर्फ काल्पनिक बग्गी कोड के वास्तविक पुस्तकालय के सामने विलय करने के लिए है?
बोल्डविन डे

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

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