चूंकि कॉफी स्क्रिप्ट का कोई var
बयान नहीं है, इसलिए यह स्वचालित रूप से कॉफी-स्क्रिप्ट में सभी चर के लिए सम्मिलित करता है, इस तरह यह संकलित जावास्क्रिप्ट संस्करण को वैश्विक नामस्थान में सब कुछ लीक करने से रोकता है ।
इसलिए , उद्देश्य पर चीजों के कॉफी-स्क्रिप्ट पक्ष से वैश्विक नाम स्थान में कुछ "लीक" करने का कोई तरीका नहीं है , आपको अपने वैश्विक चर को वैश्विक वस्तु के गुणों के रूप में परिभाषित करने की आवश्यकता है ।
उन्हें विंडो पर गुण के रूप में संलग्न करें
इसका मतलब है कि आपको कुछ ऐसा करने की ज़रूरत है window.foo = 'baz';
, जो ब्राउज़र केस को हैंडल करता है, क्योंकि ग्लोबल ऑब्जेक्ट है window
।
Node.js
Node.js में कोई window
वस्तु नहीं है, इसके बजाय वह exports
वस्तु है जो Node.js मॉड्यूल को लपेटने वाले आवरण में पास हो जाती है (देखें: https://github.com/ry/node/blob/master/src/node.js# L321 ), इसलिए Node.js में आपको क्या करने की आवश्यकता है exports.foo = 'baz';
।
अब हम डॉक्स से आपकी बोली में क्या कहते हैं, इस पर एक नज़र डालते हैं:
... दोनों CommonJS और ब्राउज़र को लक्षित करते हुए: रूट = निर्यात? इस
यह स्पष्ट रूप से कॉफी-स्क्रिप्ट है, तो आइए एक नज़र डालते हैं कि यह वास्तव में क्या संकलन करता है:
var root;
root = (typeof exports !== "undefined" && exports !== null) ? exports : this;
पहले यह जांच करेगा कि क्या exports
परिभाषित किया गया है, क्योंकि जावास्क्रिप्ट में एक गैर-मौजूद चर को संदर्भित करने की कोशिश कर रहा है अन्यथा एक सिंटैक्सएयर (केवल इसके साथ उपयोग किए जाने पर छोड़कर typeof
) प्राप्त होगा
तो अगर exports
मौजूद है, जो कि Node.js (या बुरी तरह से लिखे गए वेबसाइट ...) के मामले में है, तो रूट इंगित करेगा exports
, अन्यथा this
। तो क्या है this
?
(function() {...}).call(this);
.call
किसी फ़ंक्शन पर उपयोग करने this
से फ़ंक्शन को पहले पैरामीटर में पारित कर दिया जाएगा, जो ब्राउज़र के मामले में this
अब window
ऑब्जेक्ट होगा, Node.js के मामले में यह वैश्विक संदर्भ होगा जो global
ऑब्जेक्ट के रूप में भी उपलब्ध है ।
लेकिन चूंकि आपके पास require
Node.js में फ़ंक्शन है, इसलिए Node.js में global
ऑब्जेक्ट को कुछ असाइन करने की आवश्यकता नहीं है , इसके बजाय आप exports
ऑब्जेक्ट को असाइन करते हैं जो तब require
फ़ंक्शन द्वारा वापस आ जाता है।
कॉफी-स्क्रिप्ट
उस सब स्पष्टीकरण के बाद, यहाँ आपको क्या करना है:
root = exports ? this
root.foo = -> 'Hello World'
यह foo
वैश्विक नाम स्थान (जो कुछ भी होता है) में हमारे कार्य की घोषणा करेगा ।
बस इतना ही :)