हरमन का जवाब काफी अच्छा है, लेकिन मुझे कॉफीस्क्रिप्ट कंपाइलर और क्यों किया जाता है, इस पर थोड़ा सा विस्तार करने दें।
(function() {
...
}).call(this);
कि क्यों है:
जब आप coffee -c foo.coffee
के साथ कुछ संकलन, आप हमेशा एक foo.js
कि इस तरह दिखता है मिलेगा? ठीक है, आप
x = 'stringy string'
foo.coffee
में की तरह एक काम कर दिया लगता है। जब यह देखता है, संकलक पूछता है: क्या x
पहले से ही इस दायरे में या बाहरी दायरे में मौजूद है? यदि नहीं, तो यह जावास्क्रिप्ट आउटपुट में उस दायरे के शीर्ष पर var x
घोषणा करता है।
अब आप bar.coffee
में लिखने
x = 42
, दोनों संकलन, और तैनाती के लिए bar.js
साथ foo.js
श्रेणीबद्ध लगता है।आप मिल जाएगा
(function() {
var x;
x = 'stringy string';
...
}).call(this);
(function() {
var x;
x = 42;
...
}).call(this);
तो foo.coffee
में x
और bar.coffee
में x
एक दूसरे से पूरी तरह से अलग कर रहे हैं। यह CoffeeScript का एक महत्वपूर्ण हिस्सा है: चर एक .coffee फ़ाइल से दूसरे में रिसाव कभी नहीं जब तक स्पष्ट (एक Node.js में वैश्विक साझा, या exports
करने के लिए संलग्न किया जा रहा द्वारा) का निर्यात किया।
आप -b
("bare") ध्वज coffee
पर उपयोग करके इसे ओवरराइड कर सकते हैं, लेकिन इसका उपयोग केवल विशेष मामलों में किया जाना चाहिए। यदि आपने उपर्युक्त उदाहरण के साथ इसका उपयोग किया है, तो आपको प्राप्त होने वाला आउटपुट
var x;
x = 'stringy string';
...
var x;
x = 42;
...
इससे गंभीर परिणाम हो सकते हैं। इस अपने आप को परीक्षण करने के लिए, foo.coffee
में setTimeout (-> alert x), 1
जोड़ने का प्रयास करें। और ध्यान दें कि आप दो जे एस श्रेणीबद्ध की जरूरत नहीं है कि अपने आप को-यदि फ़ाइलें आप उन्हें एक पृष्ठ पर शामिल करने के लिए दो अलग-अलग <script>
टैग का उपयोग, वे अभी भी प्रभावी रूप से एक फ़ाइल के रूप में चलाते हैं।
विभिन्न मॉड्यूल का स्कोप अलग करके, CoffeeScript संकलक चिंता अपनी परियोजना में विभिन्न फ़ाइलें एक ही स्थानीय चर नाम का उपयोग कर सकते हैं कि क्या की सिर दर्द से बचाता है। यह (बस के बारे में कोई jQuery प्लगइन देखते हैं, उदाहरण के लिए, jQuery source, या) जावास्क्रिप्ट दुनिया में आम बात -CoffeeScript सिर्फ तुम्हारे लिए यह का ध्यान रखता है।
ध्यान दें कि आप उत्पन्न जावास्क्रिप्ट, नहीं लिखा coffeescript देख रहे हैं। – Dykam