2009-06-23 6 views
10

मैं jQuery यूआई कोड देख रहा था, और मैंने पाया कि हर फ़ाइल इस तरह की एक निर्माण के साथ शुरू होता है:जावास्क्रिप्ट के इस बिट का नतीजा क्या है?

;jQuery.ui || (function($) { 

मेरा प्रश्न है: क्यों jQuery से पहले अर्धविराम है, और क्यों तार्किक या किया जा रहा है ?

jrh

+0

आपके प्रश्नों में से पहला एक डुप्लिकेट है [जावास्क्रिप्ट पुस्तकालयों में अग्रणी अर्धविराम क्या करता है?] (Http://stackoverflow.com/q/1873983/1048572) – Bergi

+0

या दूसरी तरफ? आपके द्वारा लिंक किया गया प्रश्न कुछ महीनों से नया है .. – jrharshath

+0

प्रश्न जो मैंने लिंक किया है वह विषय पर कैननिकल है, बेहतर उत्तरों के साथ, यही कारण है कि मैंने इसे लिंक किया। – Bergi

उत्तर

21

क्यों jQuery से पहले अर्धविराम है ऊपर लाइन के टूट संस्करण है पृष्ठ नीचे सभी तरह से स्क्रॉल करने के लिए इससे पहले कि एक :-)

क्लिक किया?

अर्ध-कॉलन सुरक्षित फ़ाइल समावेशन सुनिश्चित करने के लिए है। (पुस्तकालयों और पुस्तकालय घटकों को अक्सर एक फ़ाइल में पैक किया जाता है)

तार्किक या क्यों किया जा रहा है?

दाएं हाथ की तरफ स्वयं-आमंत्रण रहित फ़ंक्शन केवल तभी चलाया जाएगा जब कथन का बायां हाथ एक झूठे मूल्य का मूल्यांकन करता है। तो यदि jQuery.ui पृष्ठ पर पहले से मौजूद है तो फ़ंक्शन नहीं चलाया जाएगा।यह केवल तब चलता है जब jQuery.ui अभी तक मौजूद नहीं है।

+2

हेहे, "झूठी", अच्छा। यह एक शानदार तरीका है जो उस मूल्य का वर्णन करने का एक शानदार तरीका है जो गलत के रूप में मूल्यांकन करता है, मुझे यह पसंद है। –

+1

मेरा शब्द नहीं ... मुझे लगता है कि मैंने इसे डौग क्रॉकफोर्ड वीडियो में सुना है। – James

1

अंग्रेजी में, कोड की है कि रेखा का कहना है: या तो jQuery.ui मौजूद है, या इस समारोह को परिभाषित ...

जैसे अगर jQuery.ui परिभाषित नहीं किया गया है, तो फ़ंक्शन बनाया जाएगा।

प्रारंभिक सेमी-कोलन का कोई प्रभाव नहीं होना चाहिए - यह केवल कोड स्टेटमेंट के अंत को सीमित करता है।

1

मुझे लगता है कि फ़ाइल को शामिल करने के लिए लॉजिकल या किया जा रहा है (और मूल्यांकन किया गया) कई बार, और खुद को क्लॉबर नहीं: यदि आप इसे फिर से लोड करते हैं, तो jQuery.ui पहले से ही परिभाषित किया जाएगा, और यह नहीं होगा कुछ भी करो।

अगर किसी ने स्क्रिप्ट टैग का ट्रैक खो दिया है तो फ़ाइल को गलती से कई बार शामिल किया जा सकता है।

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

एक नकली अर्धविराम नुकसान नहीं करता है, एक लापता अर्धविराम हो सकता है।

6

मुझे लगता है कि ; अनुमान लगा रहा है कि जावास्क्रिप्ट पैकर्स लाइन को गड़बड़ नहीं करेंगे, लेकिन यह मेरे पास सबसे अच्छा है।

तार्किक या यह सुनिश्चित करने के लिए है कि jQuery.ui दो बार घोषित नहीं किया गया है। जावास्क्रिप्ट शॉर्ट सर्किट करता है, इसलिए || के दाईं ओर यह मूल्यांकन नहीं करेगा यदि बाएं हाथ की ओर truthey(धन्यवाद JP!) पर कुछ ऐसा मूल्यांकन करता है।

बोनस सिंटैक्स समझने वाला, कि गुमनाम फ़ंक्शन में पास किया गया $ jQuery का संदर्भ है। मैं तो, यहाँ

;    // extra semi colon to ensure correct concatenation and minifying 
jQuery.ui  // check if the variable called jQuery.ui is truthey 
||    // OR if jQuery.ui isn't defined 
(function($) {...})(jQuery); // define and execute an anonymous function 
          // passing in the conflict safe jQuery 
          // as the parameter called $ 
संबंधित मुद्दे