जावास्क्रिप्ट को "" के साथ शुरू करने की आवश्यकता क्यों है?


218

मैंने हाल ही में देखा है कि वेब पर बहुत सारी जावास्क्रिप्ट फाइलें ;टिप्पणी अनुभाग के तुरंत बाद शुरू होती हैं ।

उदाहरण के लिए, इस jQuery प्लगइन का कोड निम्न से शुरू होता है:

/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008                                      
 .... skipping several lines for brevity...
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){

फ़ाइल को एक के साथ शुरू करने की आवश्यकता क्यों है ;? मैं सर्वर-साइड जावास्क्रिप्ट फ़ाइलों में भी इस सम्मेलन को देखता हूं।

ऐसा करने के क्या फायदे और नुकसान हैं?

जवाबों:


352

मैं कहूंगा कि चूंकि लिपियों को अक्सर संक्षिप्त और छोटा किया जाता है / संपीड़ित / एक साथ भेजा जाता है, ऐसा मौका होता है कि अंतिम व्यक्ति को कुछ ऐसा होता है:

return {
   'var':'value'
}

अंतिम स्क्रिप्ट के अंत में बिना ;अंत के। यदि आपके पास ;शुरू में एक है , तो यह सुरक्षित है, उदाहरण:

return {
   'var':'value'
}
;(function( $ ){ //Safe (still, screw you, last guy!)

return {
   'var':'value'
}
(function( $ ){ //Oh crap, closure open, kaboom!

return {
   'var':'value'
};
;(function( $ ){ //Extra ;, still safe, no harm

8
आप वास्तव returnमें एक स्क्रिप्ट में आखिरी चीज के रूप में बयान नहीं कर सकते , क्या आप कर सकते हैं? शीर्ष स्तर पर लौटने का कोई मतलब नहीं है। यह कुछ और होना चाहिए, है ना?
user2357112 मोनिका

3
@ user2357112 इससे भी अधिक, एक बयान के बाद कोड returnनिष्पादित नहीं होता है, इसलिए यह संक्षिप्त करने के लिए समझ में नहीं आता है। कम से कम एक }लापता है।
रॉबर्ट

57

मेरा मानना ​​है कि (हालांकि मैं निश्चित नहीं हूं, इसलिए कृपया मुझ पर मत थोपो) कि यह एक अलग फ़ाइल से किसी भी पूर्व बयान को सुनिश्चित करेगा। सबसे खराब स्थिति में, यह एक खाली बयान होगा, लेकिन सबसे अच्छे मामले में यह इस फ़ाइल में एक त्रुटि को ट्रैक करने की कोशिश करने से बच सकता है जब अधूरा बयान वास्तव में ऊपर से आया था।


9
मुझे 100% यकीन नहीं है, लेकिन मैं इस एक, जेरी पर आपके साथ हूं।
विस्थापित करें

12

इस उदाहरण पर विचार करें:

function a() {
  /* this is my function a */
}
a()
(function() {
  /* This is my closure */
})()

क्या होगा इसका मूल्यांकन इस तरह किया जाएगा:

function a() {
  /* this is my function a */
}
a()(function() {})()

तो जो कभी aवापस आ रहा है उसे एक फ़ंक्शन के रूप में माना जाएगा जिसे प्रारंभ करने की कोशिश की जाएगी।

यह ज्यादातर त्रुटियों को रोकने के लिए होता है, जब एक फाइल में कई फाइलों को समाप्‍त करने की कोशिश की जाती है:

a.js

function a() {
  /* this is my function a */
}
a()

b.js

(function() {
  /* This is my closure */
})()

यदि हम इन फ़ाइलों को एक साथ सम्‍मिलित करते हैं तो यह समस्‍या का कारण बनेगी।

इसलिए अपने ;सामने रखना याद रखें (और शायद कुछ अन्य जगहों पर भी। Btw। var a = 1;;;var b = 2;;;;;;;;;var c = a+b;पूरी तरह से मान्य जावास्क्रिप्ट है

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