जावास्क्रिप्ट में एक वैश्विक चर घोषित करने के लिए कैसे?


जवाबों:


215

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

window.globalVar = "This is global!";

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


windowकेवल ब्राउज़रों में उपलब्ध है। क्या आप इसे सभी वातावरणों में काम करने के लिए उत्तर दे सकते हैं? देखें कि जावास्क्रिप्ट में वैश्विक वस्तु कैसे प्राप्त करें?
माइकल पेरोलाकोव्स्की

52

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

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

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


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

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

धन्यवाद टॉमस! यदि अधिक आवश्यकता नहीं है, तो मूल ऑब्जेक्ट को हटाएं (जैसे:) delete $.miniMenu। ठीक है न?
कुंज

1
@KunJ: ज़रूर, किसी भी चीज़ के साथ: यदि आप गारंटी दे सकते हैं कि इसका अब उपयोग नहीं किया जाएगा, तो इसे हटाना सुरक्षित है। हालाँकि, जावास्क्रिप्ट इसे आपके लिए एकत्रित करेगा, इसलिए आपको नहीं करना है delete $.miniMenu
टॉमस एशचन

20

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

युक्ति : इस पृष्ठ में इस पूरे कोड को कंसोल में चलाएं ;-)


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

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

एक गुमराह जवाब। एंड्रेस के साथ सहमत हूँ, कि एक jQuery चर बिल्कुल नहीं है। यदि आप $current = 0;फ़ंक्शन से शुरुआत में परिभाषित नहीं करते हैं , तो बाद में कोई काम नहीं करेगा।
१२:१५ बजे १ '

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 में अभी तक काम के लिए सबसे अच्छा जवाब।
क्लिंटन ग्रीन

1
मुझे पता है कि मैं कब्र खोद रहा हूं लेकिन यह एक स्पष्ट वैश्विक चर भी नहीं है। यह एक साझा सार्वजनिक चर के साथ धुन में एक बहुत अधिक है जो बहुत छोटी लिपियों के लिए बंद होने के कारण नहीं है। वे दो पूरी तरह से अलग-अलग तरीके / उपयोग हैं और यह एक बड़ी मुसीबत में आपको मिलेगा यदि आपकी स्क्रिप्ट में एक स्पष्ट वैश्विक घोषित करना जो कई अलग-अलग लिपियों के बीच में है। मैं केवल अपनी टीम के सामने एक अंत की कल्पना कर सकता हूं जो एक स्क्रिप्ट के शीर्ष पर एक वैश्विक चर घोषित करता है जो कि डोम में बुलाया जाने वाला 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
}

3

उपयोग करने का सबसे अच्छा तरीका है 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 है । आशा है कि यह मदद करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.