जैसा ऊपर बताया गया है, आपकी स्क्रिप्ट फ़ाइल में शीर्ष-स्कोप का उपयोग करने में समस्याएं हैं। यहां एक और मुद्दा है: स्क्रिप्ट फ़ाइल किसी ऐसे संदर्भ से चल सकती है जो कुछ रन-टाइम वातावरण में वैश्विक संदर्भ नहीं है।
यह वैश्विक को window
पर सीधे असाइन करने का प्रस्ताव दिया गया है। लेकिन यह भी रन-टाइम निर्भर है और यह नोड आदि में काम नहीं करता है। यह दिखाता है कि पोर्टेबल ग्लोबल वैरिएबल प्रबंधन को कुछ सावधानीपूर्वक विचार और अतिरिक्त प्रयास की आवश्यकता है। शायद वे इसे भविष्य में ईसीएमएस संस्करणों में ठीक कर देंगे!
अभी के लिए, मैं सभी रन-टाइम वातावरण के लिए उचित वैश्विक प्रबंधन का समर्थन करने के कुछ इस तरह की सिफारिश करेंगे:
/**
* Exports the given object into the global context.
*/
var exportGlobal = function(name, object) {
if (typeof(GLOBAL) !== "undefined") {
// Node.js
GLOBAL[name] = object;
}
else if (typeof(window) !== "undefined") {
// JS with GUI (usually browser)
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
// export exportGlobal itself
exportGlobal("exportGlobal", exportGlobal);
// create a new global namespace
exportGlobal("someothernamespace", {});
यह थोड़ा अधिक टाइपिंग है, लेकिन यह अपने वैश्विक चर प्रबंधन भविष्य प्रूफ बना देता है।
अस्वीकरण: stacktrace.js के पिछले संस्करणों को देखते समय इस विचार का हिस्सा मेरे पास आया। मुझे लगता है कि रन-टाइम पर्यावरण के अधिक विश्वसनीय और कम हैकिश का पता लगाने के लिए कोई भी बोवर या अन्य टूल्स का उपयोग कर सकता है।
हालांकि यह उत्तर सही है, मैं आपको बेहतर समझने के लिए Google जावास्क्रिप्ट चर स्कॉइंग की सलाह दूंगा और संभवतः इस सटीक तरीके से काम करने से बचें। – aleemb
सहमत हुए। मैं हमेशा छेड़छाड़ और संघर्ष से बचने के लिए एक सामान्य "नेमस्पेस" में सभी कार्यों और चरों को गुंजाइश करने का प्रयास करता हूं। आम तौर पर मैं इसे परियोजना या कंपनी के उत्थान के रूप में नामित करता हूं। – PatrikAkerstrand
इस उत्तर और अन्य लोगों को इस तरह से कम करना क्योंकि यह मानता है कि वैश्विक चर वैश्विक स्तर पर बनाया जा रहा है, और यह भी आवश्यक है कि चर के पहले उल्लेख सभी अन्य उल्लेखों से पहले वैश्विक दायरे में हों। – Andrew