चूंकि कॉफी स्क्रिप्ट का कोई 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ऑब्जेक्ट के रूप में भी उपलब्ध है ।
लेकिन चूंकि आपके पास requireNode.js में फ़ंक्शन है, इसलिए Node.js में globalऑब्जेक्ट को कुछ असाइन करने की आवश्यकता नहीं है , इसके बजाय आप exportsऑब्जेक्ट को असाइन करते हैं जो तब requireफ़ंक्शन द्वारा वापस आ जाता है।
कॉफी-स्क्रिप्ट
उस सब स्पष्टीकरण के बाद, यहाँ आपको क्या करना है:
root = exports ? this
root.foo = -> 'Hello World'
यह fooवैश्विक नाम स्थान (जो कुछ भी होता है) में हमारे कार्य की घोषणा करेगा ।
बस इतना ही :)