जावास्क्रिप्ट (वैश्विक चर सहित) में चर घोषणा सिंटैक्स के बीच अंतर?


292

क्या चर घोषित करने में कोई अंतर है:

var a=0; //1

...इस तरफ:

a=0; //2

... या:

window.a=0; //3

वैश्विक दायरे में?


2
AFAIK var a = 0; IE में काम नहीं करता है जब एक अन्य बाहरी js फ़ाइल के माध्यम से चर को एक्सेस करना जो एक और js फ़ाइल में घोषित किया गया है
Aivan Monceller

मैं window.a के बारे में नहीं जानता, लेकिन अन्य 2 तरीके वैश्विक दायरे में समान हैं।
प्रोग्रामर

1
@AivanMonceller वास्तव में? कृपया लिंक दे।
रेयानोस

@ रेयानोस, मैं इसे अपनी वेबसाइट पर अनुभव करता हूं। IE6 विशिष्ट होने के लिए। मुझे अपनी var enum दिखाई नहीं दे सकी, जो कि एक बाहरी js फाइल पर है और मैं इसे एक html फाइल पर इनलाइन जावास्क्रिप्ट के रूप में संदर्भित कर रहा
हूं

@ अश्विनी वैश्विक दायरे में, विंडो वैश्विक वस्तु है (ब्राउज़रों में)। var a = 1; console.log (क);
कंसोल.लॉग

जवाबों:


557

हां, कुछ मतभेद हैं, हालांकि व्यावहारिक रूप से वे आमतौर पर बड़े नहीं हैं।

एक चौथा तरीका है, और ES2015 (ES6) के रूप में दो और हैं। मैंने अंत में चौथा रास्ता जोड़ा है, लेकिन # 1 के बाद ES2015 तरीके डाले हैं (आप देखेंगे क्यों), इसलिए हमारे पास है:

var a = 0;     // 1
let a = 0;     // 1.1 (new with ES2015)
const a = 0;   // 1.2 (new with ES2015)
a = 0;         // 2
window.a = 0;  // 3
this.a = 0;    // 4

उन बयानों को समझाया

# 1 var a = 0;

यह एक वैश्विक वैरिएबल बनाता है जो वैश्विक ऑब्जेक्ट की एक संपत्ति भी है , जिसे हम windowब्राउज़रों (या thisएक वैश्विक दायरे के माध्यम से , गैर-सख्त कोड में) तक पहुंचते हैं। कुछ अन्य संपत्तियों के विपरीत, संपत्ति के माध्यम से हटाया नहीं जा सकता delete

विनिर्देश के संदर्भ में, यह वैश्विक पर्यावरण के लिए वस्तु पर्यावरण रिकॉर्ड पर एक पहचानकर्ता बाध्यकारी बनाता है । यह इसे वैश्विक वस्तु की संपत्ति बनाता है क्योंकि वैश्विक वस्तु वह है जहां वैश्विक पर्यावरण की वस्तु पर्यावरण रिकॉर्ड के लिए पहचानकर्ता बाँधते हैं। यही कारण है कि संपत्ति गैर-हटाने योग्य है: यह सिर्फ एक साधारण संपत्ति नहीं है, यह एक पहचानकर्ता बंधन है।

बाध्यकारी (चर) कोड रन की पहली पंक्ति से पहले परिभाषित किया गया है (नीचे "जब varहोता है" देखें)।

ध्यान दें कि IE8 और इससे पहले, बनाई गई संपत्ति गणना योग्यwindow नहीं है ( बयानों में नहीं दिखाई देती है )। IE9 में, क्रोम, फ़ायरफ़ॉक्स और ओपेरा, यह बहुत ही शानदार है।for..in


# 1.1 let a = 0;

यह एक वैश्विक चर बनाता है जो वैश्विक वस्तु का गुण नहीं है। यह ES2015 के रूप में एक नई बात है।

विनिर्देश के संदर्भ में, यह वस्तु पर्यावरण रिकॉर्ड के बजाय वैश्विक पर्यावरण के लिए घोषणात्मक पर्यावरण रिकॉर्ड पर बाध्यकारी पहचानकर्ता बनाता है । वैश्विक वातावरण एक विभाजन पर्यावरण रिकार्ड, सभी पुराने सामान है कि वैश्विक वस्तु (पर चला जाता है के लिए एक करने में अद्वितीय है वस्तु सभी नए सामान के लिए पर्यावरण रिकॉर्ड) और एक अन्य ( , , और द्वारा बनाई कार्यों ) है कि नहीं है वैश्विक वस्तु पर जाएं।letconstclass

बाइंडिंग को उसके एन्कोडिंग ब्लॉक में किसी भी चरण-दर-चरण कोड से पहले बनाया गया है (इस मामले में, किसी भी वैश्विक कोड चलने से पहले), लेकिन यह किसी भी तरह से सुलभ नहीं है जब तक कि चरण-दर-चरण निष्पादन letकथन तक नहीं पहुंचता । एक बार निष्पादन letस्टेटमेंट तक पहुंच जाता है , तो चर सुलभ होता है। (नीचे "कब letऔर constक्या होगा" देखें।)


# 1.2 const a = 0;

एक वैश्विक स्थिरांक बनाता है, जो वैश्विक वस्तु का गुण नहीं है।

constबिल्कुल वैसा ही है, letसिवाय इसके कि आपको एक इनिलाइज़र ( = valueहिस्सा) प्रदान करना होगा , और एक बार बनने के बाद आप स्थिरांक का मूल्य नहीं बदल सकते। कवर के तहत, यह बिल्कुल वैसा ही है, letलेकिन पहचानकर्ता बंधन पर एक ध्वज के साथ यह कहते हुए कि इसके मूल्य को नहीं बदला जा सकता है। constआपके लिए तीन चीजों का उपयोग करना है:

  1. यदि आप स्थिरांक को असाइन करने का प्रयास करते हैं, तो यह एक पार्स-टाइम त्रुटि बनाता है।
  2. अन्य प्रोग्रामर के लिए इसकी अपरिवर्तनीय प्रकृति के दस्तावेज।
  3. जावास्क्रिप्ट इंजन को इस आधार पर अनुकूलित करता है कि यह नहीं बदलेगा।

# 2 a = 0;

यह स्पष्ट रूप से वैश्विक वस्तु पर एक संपत्ति बनाता है । जैसा कि यह एक सामान्य संपत्ति है, आप इसे हटा सकते हैं। मैं यह नहीं करने की सलाह दूंगा, यह बाद में आपके कोड को पढ़ने वाले किसी को भी अस्पष्ट हो सकता है। यदि आप ईएस 5 के सख्त मोड का उपयोग करते हैं, तो ऐसा करना (गैर-मौजूद चर पर असाइन करना) एक त्रुटि है। यह सख्त मोड का उपयोग करने के कई कारणों में से एक है।

और दिलचस्प बात यह है IE8 और पहले पर फिर से, संपत्ति नहीं बनाया गणनीय (में दिखाई नहीं देता for..inबयान)। यह अजीब है, विशेष रूप से नीचे # 3 दिया गया है।


# 3 window.a = 0;

यह स्पष्ट रूप से वैश्विक ऑब्जेक्ट पर एक संपत्ति बनाता है, वैश्विक का उपयोग windowकरता है जो वैश्विक ऑब्जेक्ट को संदर्भित करता है (ब्राउज़रों पर; कुछ गैर-ब्राउज़र वातावरण में एक समान वैश्विक चर होता है, जैसे कि globalNodeJS)। जैसा कि यह एक सामान्य संपत्ति है, आप इसे हटा सकते हैं।

यह गुण है , गणनीय IE8 पर और पहले, और हर दूसरे ब्राउज़र पर मैं कोशिश की है।


# 4 this.a = 0;

बिल्कुल # 3 की तरह, सिवाय इसके कि हम वैश्विक के thisबजाय वैश्विक वस्तु को संदर्भित कर रहे हैं window। यह सख्त मोड में काम नहीं करेगा, हालांकि, क्योंकि सख्त मोड वैश्विक कोड में, thisवैश्विक ऑब्जेक्ट का संदर्भ नहीं है (इसके undefinedबजाय इसका मूल्य है )।


गुण हटाना

मुझे "हटाने" या "हटाने" से क्या मतलब है a? सटीक रूप से वह: deleteकीवर्ड के माध्यम से संपत्ति (पूरी तरह से) हटाना :

window.a = 0;
display("'a' in window? " + ('a' in window)); // displays "true"
delete window.a;
display("'a' in window? " + ('a' in window)); // displays "false"

deleteकिसी वस्तु से पूरी तरह से एक संपत्ति को निकालता है। आप ऐसा नहीं कर सकते हैं कि जिन गुणों के साथ windowअप्रत्यक्ष रूप से जोड़ा गया है var, उन्हें deleteया तो चुपचाप अनदेखा किया जाता है या एक अपवाद को फेंकता है (जावास्क्रिप्ट कार्यान्वयन के आधार पर और क्या आप सख्त मोड में हैं)।

चेतावनी : IE8 फिर (और शायद पहले, और IE9-IE11 टूटी हुई "संगतता" मोड में): यह आपको windowऑब्जेक्ट के गुणों को हटाने नहीं देगा , तब भी जब आपको अनुमति दी जानी चाहिए। इससे भी बदतर, यह एक अपवाद फेंकता है जब आप कोशिश करते हैं ( IE8 और अन्य ब्राउज़रों में इस प्रयोग को आज़माएं )। इसलिए जब windowऑब्जेक्ट से हटाते हैं , तो आपको रक्षात्मक होना होगा:

try {
    delete window.prop;
}
catch (e) {
    window.prop = undefined;
}

यह संपत्ति को हटाने की कोशिश करता है, और अगर एक अपवाद को फेंक दिया जाता है तो यह अगली सबसे अच्छी बात करता है और संपत्ति को सेट करता है undefined

यह केवलwindow ऑब्जेक्ट पर लागू होता है , और केवल (जहां तक ​​मुझे पता है) IE8 और इससे पहले (या टूटी हुई "संगतता" मोड में IE9-IE11)। अन्य ब्राउजर windowसंपत्तियों को हटाने के साथ ठीक हैं, ऊपर दिए गए नियमों के अधीन हैं।


कब varहोता है

चर के माध्यम से परिभाषित varकरने से पहले बयान बनाई गई हैं किसी भी निष्पादन संदर्भ में कोड कदम-दर-कदम चलाया जाता है, और इसलिए संपत्ति अच्छी तरह से मौजूद है से पहलेvar बयान।

यह भ्रामक हो सकता है, तो आइए नज़र डालते हैं:

display("foo in window? " + ('foo' in window)); // displays "true"
display("window.foo = " + window.foo);          // displays "undefined"
display("bar in window? " + ('bar' in window)); // displays "false"
display("window.bar = " + window.bar);          // displays "undefined"
var foo = "f";
bar = "b";
display("foo in window? " + ('foo' in window)); // displays "true"
display("window.foo = " + window.foo);          // displays "f"
display("bar in window? " + ('bar' in window)); // displays "true"
display("window.bar = " + window.bar);          // displays "b"

लाइव उदाहरण:

जैसा कि आप देख सकते हैं, प्रतीक fooको पहली पंक्ति से पहले परिभाषित किया गया है, लेकिन प्रतीक barनहीं है। जहां var foo = "f";कथन है, वास्तव में दो चीजें हैं: प्रतीक को परिभाषित करना, जो कोड की पहली पंक्ति चलने से पहले होता है; और उस प्रतीक के लिए एक कार्य कर रहा है, जो कि चरण-दर-चरण प्रवाह में होता है। इसे " varउत्थापन" के रूप में जाना जाता है क्योंकि var fooभाग को ("लहराया") दायरे के शीर्ष पर ले जाया जाता है, लेकिन foo = "f"भाग को उसके मूल स्थान पर छोड़ दिया जाता है। ( मेरे छोटे से ब्लॉग पर गरीब गलतvar समझें।)


कब letऔर constक्या हुआ

letऔर कुछ तरीकों constसे अलग varहैं। यह सवाल जिस तरह से प्रासंगिक है, वह यह है कि हालांकि वे जिस भी बंधन को परिभाषित करते हैं, वह किसी भी चरण-दर-चरण कोड से पहले निर्मित होता है, यह तब तक सुलभ नहीं होता जब तक कि यह कथन letया constकथन तक नहीं पहुंच जाता।

इसलिए जब यह चलता है:

display(a);    // undefined
var a = 0;
display(a);    // 0

यह एक त्रुटि फेंकता है:

display(a);    // ReferenceError: a is not defined
let a = 0;
display(a);

अन्य दो तरीके जो अलग let- constअलग हैं var, जो वास्तव में प्रश्न के लिए प्रासंगिक नहीं हैं:

  1. varहमेशा संपूर्ण निष्पादन संदर्भ पर लागू होता है (वैश्विक कोड भर, या समारोह जहां यह प्रतीत होता है में समारोह कोड भर), लेकिन letऔर constकेवल भीतर लागू ब्लॉक जहां वे दिखाई देते हैं। है यही कारण है, varसमारोह (या वैश्विक) गुंजाइश है, लेकिन letऔर constब्लॉक गुंजाइश है।

  2. var aएक ही संदर्भ में दोहराना हानिरहित है, लेकिन यदि आपके पास let a(या const a), एक let aया एक const aया var aएक वाक्यविन्यास त्रुटि है।

यहाँ एक उदाहरण का प्रदर्शन है कि letऔर constतुरंत प्रभावी उनके ब्लॉक में है कि ब्लॉक रन के भीतर किसी भी कोड से पहले, लेकिन जब तक सुलभ नहीं हैं letया constबयान:

var a = 0;
console.log(a);
if (true)
{
  console.log(a); // ReferenceError: a is not defined
  let a = 1;
  console.log(a);
}

ध्यान दें कि ब्लॉक के बाहर से console.logपहुंचने के बजाय दूसरा विफल रहता है a


ऑफ-टॉपिक: वैश्विक ऑब्जेक्ट को अव्यवस्थित करने से बचें ( window)

windowवस्तु बहुत, बहुत गुण से भरा हुआ हो जाता है। जब भी संभव हो, दृढ़ता से गंदगी को न जोड़ने की सलाह दें। इसके बजाय, अपने प्रतीकों को एक छोटे पैकेज में लपेटें और ऑब्जेक्ट को अधिकतम एक प्रतीक पर निर्यात करें window। (मैं अक्सर किसी भी प्रतीक को windowऑब्जेक्ट में निर्यात नहीं करता ।) आप अपने प्रतीकों को शामिल करने के लिए अपने सभी कोड को शामिल करने के लिए एक फ़ंक्शन का उपयोग कर सकते हैं, और यदि आप चाहें तो यह फ़ंक्शन गुमनाम हो सकता है:

(function() {
    var a = 0; // `a` is NOT a property of `window` now

    function foo() {
        alert(a);   // Alerts "0", because `foo` can access `a`
    }
})();

उस उदाहरण में, हम एक फ़ंक्शन को परिभाषित करते हैं और इसे तुरंत ( ()अंत में) निष्पादित किया जाता है।

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


क्या मैं window['a']=0यह स्पष्ट कर सकता हूं कि मैं मानचित्र के रूप में विंडो का उपयोग कर रहा हूं? यह windowविशेष है कि कुछ ब्राउज़र इसे अनुमति नहीं देते हैं और मुझे उपयोग करने के लिए मजबूर करते हैं window.a?
जयन

# 3 पर एक नोट जो संभवतः स्पष्ट करने योग्य है: window.a = 0;केवल ब्राउज़र वातावरण में काम करता है, और केवल सम्मेलन द्वारा। वैश्विक वस्तु को नामांकित चर से windowबांधना ES प्रजाति में नहीं है और इसलिए इसमें काम नहीं करेगा, उदाहरण के लिए, V8 या Node.js, जबकि this.a = 0;(वैश्विक निष्पादन संदर्भ में आह्वान किया गया) किसी भी वातावरण में काम करेगा क्योंकि कल्पना निर्दिष्ट नहीं करती है वहाँ होना चाहिए कि एक वैश्विक वस्तु। यदि आप अपने कोड को IIFE में ऑफ़-टॉपिक सेक्शन में लपेटते हैं , तो आप thisनामांकित पैरामीटर के रूप में पास कर सकते हैं windowया globalवैश्विक ऑब्जेक्ट का सीधा संदर्भ प्राप्त कर सकते हैं ।
Sherlock_HJ

@Sherlock_HJ: मैंने "ब्राउज़रों पर;" यह पहले भी उत्तर में है, लेकिन मैंने इसे उस स्थिति में जोड़ा है, जब लोग इसे छोड़ देते हैं। यह अभी कल्पना में है ; जबकि यह केवल गुजरने में है, आपको ऐसा ब्राउज़र नहीं मिलेगा जो ऐसा न करे। मैं थोड़ा हैरान हूं कि यह अनुबंध बी में नहीं है ।
TJ Crowder

@TJCrowder, इसलिए, एक वैश्विक चर जो var a = 0;स्वचालित रूप से घोषित किया गया है, वैश्विक वस्तु का एक गुण बन जाता है। यदि मैं var b = 0;एक फ़ंक्शन घोषणा के भीतर घोषित करता हूं , तो क्या यह किसी अंतर्निहित वस्तु की संपत्ति भी होगी?
एज़प्रेसो

@ezpresso: नहीं और हाँ। वे एक वस्तु का गुण हो जाते ( EnvironmentRecord की VariableEnvironment की ExecutionContext जहां वे दिखाई देते हैं, विवरण यहाँ और यहाँ ), लेकिन वहाँ सीधे उपयोग करने के लिए कोई रास्ता नहीं है कि इस कार्यक्रम के कोड से वस्तु।
टीजे क्राउडर

40

इसे सरल रखना:

a = 0

उपरोक्त कोड वैश्विक स्कोप वैरिएबल देता है

var a = 0;

यह कोड वर्तमान क्षेत्र में और इसके तहत उपयोग किए जाने वाला एक चर देगा

window.a = 0;

यह आमतौर पर वैश्विक चर के समान है।


आपके कथन "ऊपर दिया गया कोड एक वैश्विक स्कोप वैरिएबल देता है" और "यह कोड एक वैरिएबल देगा जिसे वर्तमान स्कोप में उपयोग किया जाएगा, और इसके तहत" , एक साथ लिया गया है, यह सुझाव देता है कि आप पहली पंक्ति का उपयोग नहीं कर सकते हैं और इसके a तहत एक्सेस कर सकते हैं । वर्तमान गुंजाइश। आप ऐसा कर सकते हैं। इसके अलावा, "ग्लोबल वेरिएबल" का आपका उपयोग थोड़ा बंद है - आपके द्वारा कहे गए दो स्थान "ग्लोबल वैरिएबल" उस जगह से अधिक वैश्विक नहीं हैं, जहां आप इसे नहीं कहते हैं।
टीजे क्राउडर

वैश्विक स्वयं का मतलब है कि आप चर को कहीं भी पढ़ / लिख सकते हैं, उस जगह सहित जहां मैंने वर्तमान गुंजाइश का उल्लेख किया है, यह इतना स्पष्ट है। और यदि आप यह सुझाव देते हैं कि स्क्रिप्ट में window.a और 'a' अभ्यस्त न हो तो आप 100% गलत हैं।
उमैर जब्बार

3
@Umair: "वैश्विक स्वयं का अर्थ है कि आप चर को कहीं भी पढ़ / लिख सकते हैं" । फिर, आप मध्य से पहले और अंतिम "वैश्विक" के रूप में बुला रहे हैं, निश्चित रूप से वे नहीं हैं।
टीजे क्राउडर

4
माना जाता है कि किसी कार्य के अंदर मध्य का उपयोग किया जाता है, यदि मुख्य दायरे में उपयोग किया जाता है तो वे सभी समान होंगे। एक फ़ंक्शन के अंदर var का उपयोग करना मेरी धारणा थी
Umair Jabbar

4
@Uair: "किसी फ़ंक्शन के अंदर var का उपयोग करना मेरी धारणा थी" आह, ठीक है। लेकिन यह सवाल नहीं है। प्रश्न बहुत स्पष्ट रूप से "वैश्विक दायरे में" कहता है । यदि आप धारणा को बदलने जा रहे हैं (जो कि अधिक सामान्य है, विस्तार और अधिक सामान्य बिंदु समझाने के लिए), तो आपको स्पष्ट होना चाहिए कि आप अपने उत्तर में क्या कर रहे हैं।
टीजे क्राउडर

10
<title>Index.html</title>
<script>
    var varDeclaration = true;
    noVarDeclaration = true;
    window.hungOnWindow = true;
    document.hungOnDocument = true;
</script>
<script src="external.js"></script>

/* external.js */

console.info(varDeclaration == true); // could be .log, alert etc
// returns false in IE8

console.info(noVarDeclaration == true); // could be .log, alert etc
// returns false in IE8

console.info(window.hungOnWindow == true); // could be .log, alert etc
// returns true in IE8

console.info(document.hungOnDocument == true); // could be .log, alert etc
// returns ??? in IE8 (untested!)  *I personally find this more clugy than hanging off window obj

क्या कोई वैश्विक वस्तु है जिसे सभी संस्करण डिफ़ॉल्ट रूप से बंद कर दिए जाते हैं? उदाहरण: 'globals.noVar घोषणा'


बहुत अच्छा अन्वेषण। window.*घोषणा का उपयोग करने के लिए निश्चित गाइड । यह घोषणा आपके कोड को कॉपी-पेस्ट करने के मुकाबले सबसे सुरक्षित लगती है, और स्पष्ट भी।
दान

7

के उत्कृष्ट जवाब पर bassed टीजे Crowder : ( विषय से संबंधित नहीं: बचें अव्यवस्था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 है । आशा है कि यह मदद करेगा!


5

वैश्विक दायरे में कोई शब्दार्थ अंतर नहीं है।

लेकिन आपको वास्तव में a=0एक अघोषित चर के लिए अपने मूल्य को निर्धारित करने से बचना चाहिए ।

इसके अलावा वैश्विक दायरे को संपादित करने से बचने के लिए क्लोजर का उपयोग करें

(function() {
   // do stuff locally

   // Hoist something to global scope
   window.someGlobal = someLocal
}());

हमेशा बंद का उपयोग करें और हमेशा वैश्विक स्तर पर लहराएं जब इसकी बिल्कुल नेकसेरी हो। आप वैसे भी अपने अधिकांश संचार के लिए अतुल्यकालिक घटना से निपटने का उपयोग करना चाहिए।

जैसा कि @AvianMoncellor ने उल्लेख किया है कि एक IE बग var a = fooकेवल फ़ाइल स्कोप के लिए एक वैश्विक घोषित करने के साथ है। यह IE के कुख्यात टूटे हुए दुभाषिया के साथ एक मुद्दा है। यह बग परिचित ध्वनि करता है इसलिए यह शायद सच है।

इसलिए से चिपके रहे window.globalName = someLocalpointer


2
"वैश्विक दायरे में कोई शब्दार्थ अंतर नहीं है।" वास्तव में, वहाँ एक बहुत बड़ा अर्थ अंतर है, तंत्र है जिसके द्वारा संपत्ति परिभाषित हो जाता है पूरी तरह से अलग कर रहे हैं - लेकिन व्यावहारिक दृष्टि से यह केवल एक छोटा सा करने पर निर्भर करता वास्तविक अंतर (में है कि आप नहीं कर सकते deleteएक var)।
टीजे क्राउडर

@ टीजे क्राउडर मुझे नहीं पता था कि। मुझे लगा कि चर घोषणा वस्तु चर पर गुण स्थापित कर रही है। उन लोगों को नहीं हटाया जा सकता है जो नहीं जानते थे।
रेयनोस

हाँ। यदि आप उपयोग करते हैं तो उन्हें पहले भी परिभाषित किया गया है var। वे बस पूरी तरह से अलग तंत्र हैं जिनका एक ही व्यावहारिक परिणाम है। :-)
टीजे क्राउडर

@ टीजे क्राउडर मैं उल्लेख करना भूल गया कि varगुंजाइश के बंद होने के लिए कूदता है।
रेयानोस 12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.