जवाबों:
यदि आपको उत्पादन कोड में वैश्विक चर उत्पन्न करना है (जिसे टाला जाना चाहिए) हमेशा उन्हें स्पष्ट रूप से घोषित करें :
window.globalVar = "This is global!";
हालांकि, केवल विभाजित करके var
(एक ही नाम का कोई स्थानीय चर नहीं है) यह मानकर वैश्विक वैरिएबल को परिभाषित करना संभव है , ऐसा करने से एक निहित वैश्विक उत्पन्न होता है , जो करना एक बुरी बात है और सख्त मोड में एक त्रुटि उत्पन्न करेगा ।
यदि यह एकमात्र अनुप्रयोग है जहां आप इस चर का उपयोग करने जा रहे हैं, तो फेलिक्स का दृष्टिकोण उत्कृष्ट है। हालाँकि, यदि आप एक jQuery प्लगइन लिख रहे हैं, तो "namepacing" (बाद में उद्धरणों पर विवरण ...) चर और jQuery ऑब्जेक्ट के तहत आवश्यक कार्यों पर विचार करें। उदाहरण के लिए, मैं वर्तमान में एक jQuery पॉपअप मेनू पर काम कर रहा हूं जिसे मैंने मिनीमेनु कहा है। इस प्रकार, मैंने miniMenu
jQuery के तहत एक "नेमस्पेस" परिभाषित किया है , और मैं वहां सब कुछ रखता हूं।
जब मैं जावास्क्रिप्ट नामस्थानों के बारे में बात करता हूं तो मैं उद्धरणों का उपयोग करता हूं, क्योंकि वे सामान्य अर्थों में वास्तव में नाम स्थान नहीं हैं। इसके बजाय, मैं सिर्फ एक जावास्क्रिप्ट ऑब्जेक्ट का उपयोग करता हूं और अपने सभी कार्यों और चर को इस ऑब्जेक्ट के गुणों के रूप में रखता हूं।
इसके अलावा, सुविधा के लिए, मैं आमतौर पर i
सामान के लिए एक नेमस्पेस के साथ प्लगइन नेमस्पेस को सब-स्पेस करता हूं जिसे केवल प्लगइन के भीतर आंतरिक रूप से उपयोग किया जाना चाहिए, ताकि प्लगइन के उपयोगकर्ताओं से इसे छिपा सकें।
यह इस तरह काम करता है:
// An object to define utility functions and global variables on:
$.miniMenu = new Object();
// An object to define internal stuff for the plugin:
$.miniMenu.i = new Object();
अब मैं बस $.miniMenu.i.globalVar = 3
या $.miniMenu.i.parseSomeStuff = function(...) {...}
जब भी मुझे विश्व स्तर पर कुछ बचाने की आवश्यकता होती है, और मैं अभी भी इसे वैश्विक नाम स्थान से बाहर रखता हूं।
delete $.miniMenu
। ठीक है न?
delete $.miniMenu
।
EDIT प्रश्न जावास्क्रिप्ट के बारे में है, इसका उत्तर jQuery के बारे में है, जो गलत है। यह एक पुराना उत्तर है, ऐसे समय से जब jQuery व्यापक था।
इसके बजाय, मैं जावास्क्रिप्ट में समझने और स्कोप को बंद करने की सलाह देता हूं
पुराना, बुरा उत्तर: jQuery के साथ आप यह कर सकते हैं, कोई फर्क नहीं पड़ता कि घोषणा कहां है:
$my_global_var = 'my value';
और हर जगह उपलब्ध होगा। मैं इसका उपयोग त्वरित छवि दीर्घाओं बनाने के लिए करता हूं, जब चित्र विभिन्न स्थानों में फैले होते हैं, जैसे:
$gallery = $('img');
$current = 0;
$gallery.each(function(i,v){
// preload images
(new Image()).src = v;
});
$('div').eq(0).append('<a style="display:inline-block" class="prev">prev</a> <div id="gallery"></div> <a style="display:inline-block" class="next">next</a>');
$('.next').click(function(){
$current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
$('.prev').click(function(){
$current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
युक्ति : इस पृष्ठ में इस पूरे कोड को कंसोल में चलाएं ;-)
$current = 0;
फ़ंक्शन से शुरुआत में परिभाषित नहीं करते हैं , तो बाद में कोई काम नहीं करेगा।
यहां वैश्विक चर का एक मूल उदाहरण है जो आपके बाकी कार्यों तक पहुंच सकता है। यहाँ आपके लिए एक जीवंत उदाहरण है: http://jsfiddle.net/fxCE9/
var myVariable = 'Hello';
alert('value: ' + myVariable);
myFunction1();
alert('value: ' + myVariable);
myFunction2();
alert('value: ' + myVariable);
function myFunction1() {
myVariable = 'Hello 1';
}
function myFunction2() {
myVariable = 'Hello 2';
}
यदि आप एक जेकरी रेडी () फंक्शन के भीतर ऐसा कर रहे हैं तो सुनिश्चित करें कि आपका वैरिएबल तैयार है () फंक्शन के साथ ही आपके अन्य फंक्शन्स के साथ भी है।
कार्यों के बाहर चर घोषित करें
function dosomething(){
var i = 0; // can only be used inside function
}
var i = '';
function dosomething(){
i = 0; // can be used inside and outside the function
}
उपयोग करने का सबसे अच्छा तरीका है closures
, क्योंकि window
ऑब्जेक्ट बहुत, बहुत गुणों के साथ बरबाद हो जाता है ।
एचटीएमएल
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="init.js"></script>
<script type="text/javascript">
MYLIBRARY.init(["firstValue", 2, "thirdValue"]);
</script>
<script src="script.js"></script>
</head>
<body>
<h1>Hello !</h1>
</body>
</html>
init.js ( इस उत्तर के आधार पर )
var MYLIBRARY = MYLIBRARY || (function(){
var _args = {}; // private
return {
init : function(Args) {
_args = Args;
// some other initialising
},
helloWorld : function(i) {
return _args[i];
}
};
}());
script.js
// Here you can use the values defined in the html as if it were a global variable
var a = "Hello World " + MYLIBRARY.helloWorld(2);
alert(a);
यहाँ plnkr है । आशा है कि यह मदद करेगा!
window
केवल ब्राउज़रों में उपलब्ध है। क्या आप इसे सभी वातावरणों में काम करने के लिए उत्तर दे सकते हैं? देखें कि जावास्क्रिप्ट में वैश्विक वस्तु कैसे प्राप्त करें?