2010-07-28 18 views

उत्तर

207

आप उत्पादन कोड में वैश्विक चर (जो बचा जाना चाहिए) उत्पन्न करने के लिए है, तो हमेशा उन्हें स्पष्ट घोषित:

window.globalVar = "This is global!"; 

हालांकि यह सिर्फ var को छोड़ते हुए से एक वैश्विक चर परिभाषित करना संभव है (मानते हैं कि एक ही नाम का कोई स्थानीय चर नहीं है), ऐसा करने से अंतर्निहित वैश्विक उत्पन्न होता है, जो करना एक बुरी चीज है और सख्त मोड में कोई त्रुटि उत्पन्न करेगी।

+0

'विंडो' केवल ब्राउज़र में उपलब्ध है। क्या आप इसे सभी परिवेशों में काम करने के लिए उत्तर दे सकते हैं? देखें [जावास्क्रिप्ट में वैश्विक वस्तु कैसे प्राप्त करें?] (Http://stackoverflow.com/q/3277182/3853934) –

+0

** कभी भी ** कैमेलकेस का उपयोग न करें, पृथ्वी बहुविविध का प्रमुख सर्कस शो है और कोई कहीं * * अंततः * होगा अपने [डार्क पागल ऑब्जेक्ट नाम यहां] मानकीकृत करें। URL में विभाजक के रूप में डैश पर चिपकाएं और कोड के भीतर विभाजक के लिए अंडरस्कोर करें ('window.class_list')। – John

50

यदि यह एकमात्र ऐसा एप्लिकेशन है जहां आप इस चर का उपयोग करने जा रहे हैं, तो फ़ेलिक्स का दृष्टिकोण उत्कृष्ट है। हालांकि, अगर आप एक jQuery प्लगइन लिख रहे हैं, तो "ऑब्जेक्टिंग" पर विचार करें (बाद में उद्धरणों पर विवरण ...) jQuery ऑब्जेक्ट के तहत आवश्यक चर और फ़ंक्शन। उदाहरण के लिए, मैं वर्तमान में एक jQuery पॉपअप मेनू पर काम कर रहा हूं जिसे मैंने मिनीमेनू कहा है। इस प्रकार, मैंने jQuery के तहत "नेमस्पेस" miniMenu परिभाषित किया है, और मैं वहां सबकुछ रखता हूं।

जब मैं जावास्क्रिप्ट नेमस्पेस के बारे में बात करता हूं तो उद्धरणों का उपयोग करने का कारण यह है कि वे सामान्य अर्थ में वास्तव में नामस्थान नहीं हैं। इसके बजाए, मैं सिर्फ जावास्क्रिप्ट ऑब्जेक्ट का उपयोग करता हूं और इस ऑब्जेक्ट के गुणों के रूप में अपने सभी कार्यों और चर को स्थान देता हूं।

इसके अलावा, सुविधा के लिए, मैं आमतौर पर प्लगइन नामस्थान को 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(...) {...} कर सकते हैं जब भी मैं कुछ विश्व स्तर पर बचाने की जरूरत है, और मैं अभी भी यह वैश्विक नामस्थान से बाहर रखने के।

+0

उस टॉमस के लिए धन्यवाद, साइट पर मैंने ऊपर वर्णित फ़ेलिक्स दृष्टिकोण ठीक काम किया है, लेकिन मेरे पास एक और साइट है जो मैं काम कर रहा हूं जो कई प्लगइन का उपयोग करती है और यदि मैं इसे काम पर ला सकता हूं तो आपका दृष्टिकोण आदर्श होगा। आपकी मदद के लिए चीयर्स। – Dancer

+0

यह पूरी तरह से अच्छी तरह से काम करता है! बस सुनिश्चित करें कि @ टॉमस कहता है, अपने स्वयं के कस्टम फ़ंक्शंस या चर के लिए अपना स्वयं का वर्ग/धारक बनाएं। +1 – Pierre

+0

धन्यवाद टॉमस! यदि कोई और आवश्यक नहीं है, तो मूल ऑब्जेक्ट हटाएं (उदा .: '$ .miniMenu' हटाएं)। ठीक है न? – KunJ

15

यहां वैश्विक चर का एक मूल उदाहरण है कि आपके शेष कार्य पहुंच सकते हैं। यहाँ आप के लिए एक जीवित उदाहरण है: 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'; 
} 

आप एक jQuery के भीतर यह कर रहे हैं, तो तैयार() फ़ंक्शन तो सुनिश्चित करें कि आपके चर तैयार() अपने अन्य कार्यों के साथ-साथ समारोह के अंदर है या नहीं।

+0

वैश्विक चर कैसे jQuery में अभी तक काम करते हैं के लिए सबसे अच्छा जवाब। –

+0

मुझे पता है कि मैं गंभीर खुदाई कर रहा हूं लेकिन यह एक स्पष्ट वैश्विक चर भी नहीं है। यह एक साझा सार्वजनिक चर के साथ एक और अधिक है जो बहुत छोटी लिपियों के बंद होने में नहीं है। वे दो पूरी तरह से अलग-अलग विधियों/उपयोग हैं और यदि आप कई अलग-अलग स्क्रिप्ट के मध्य में एक स्क्रिप्ट में एक स्पष्ट वैश्विक घोषित करते हैं तो यह आपको बड़ी परेशानी में डाल देगा। मैं केवल अपनी टीम पर एक फ्रंट स्क्रिप्ट की कल्पना कर सकता हूं जो एक स्क्रिप्ट के शीर्ष पर एक वैश्विक चर घोषित करता है जिसे 10 वें डीओएम में बुलाया जाता है। –

4

कार्यों

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 
} 
19

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(); 
}); 

टिप: यह पेज ;-)

+1

$ गैलरी नहीं है और $ सामान्य सामान्य वैश्विक चर वर्तमान हैं? वे काम करते हैं क्योंकि आप उन्हें 'var' छोड़कर वैश्विक चर के रूप में परिभाषित कर रहे हैं, लेकिन उनके सामने डॉलर का चिह्न उन्हें 'jQuery चर' नहीं बना देता है ... यह सचमुच अंडरस्कोर या किसी अन्य चिह्न को डालने जैसा है उनमें से ... यदि आप jQuery ऑब्जेक्ट ($) का उपयोग करते हैं और इसमें कोई संपत्ति जोड़ते हैं तो वे jQuery चर होंगे: $ .myGlobalVariable = 'मेरा मान' ... –

+0

आप शायद सही हैं, लेकिन क्या ध्यान देने योग्य है कि $ myVar वाक्यविन्यास का उपयोग करके आपको 2 रोमांच मिलते हैं, 1) चर किसी भी विशेष घोषणा के बिना वैश्विक है ($ के अलावा); और 2) आप कोड के अंदर अपने वैश्विक चर को आसानी से ट्रैक कर सकते हैं। हालांकि चर्चा के लिए खुला ... – aesede

3

का इन कंसोल में इस पूरे कोड को चलाने क्योंकि window वस्तु गुणों के साथ, बहुत हो जाता है बहुत अव्यवस्थित सबसे अच्छा तरीका है, closures उपयोग करने के लिए है।

एचटीएमएल

<!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 (पर this answer आधार पर)

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 है। उम्मीद है कि यह मदद करो!

संबंधित मुद्दे