2014-12-30 6 views
7

मेरी शिक्षा जावास्क्रिप्ट के हिस्से के रूप में, मैं जिस अवधारणा को सीख रहा हूं उसे प्रदर्शित करने के लिए कोड लिखने का प्रयास करता हूं; आज मैं hoisted चर सीख रहा हूँ। यहाँ कोड मैंने लिखा है:मेरी जावास्क्रिप्ट क्यों स्थानीय वैरिएबल वापस अपरिभाषित लौट रही है, लेकिन घुमावदार वैश्विक चर खाली हो रहा है?

console.log("A: My name is " + name); 

function happy() { 
    console.log ("1: I am " + feeling); 
    var feeling = "happy"; 
    console.log ("2: I am " + feeling); 
} 
happy(); 

var name = "Jim"; 
console.log("B: My name is " + name); 

मैं उम्मीद निम्न परिणाम:

A: My name is undefined 
1: I am undefined 
2: I am happy 
B: My name is Jim 

हालांकि, WriteCodeOnline.com पर और एक अन्य खिलौने के डिब्बे में मेरी कोड का परीक्षण करते हैं, पहले console.log प्रदर्शित करता है A: My name is। मैं क्रोम ब्राउज़र का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है।

तो, मेरा सवाल यह है कि फ़ंक्शन के भीतर घुमावदार स्थानीय चर क्यों अपरिभाषित होता है जबकि घुमावदार वैश्विक चर रिक्त हो जाता है?

+0

यह प्रकट होता है एक और सवाल है कि मौजूद है मेरे प्रश्न का उत्तर दें। अगर मुझे अपने प्रश्न का उत्तर पता होता, तो शायद मैं अन्य प्रश्न भी ढूंढ पाता। यदि यह प्रश्न बंद है तो मुझे कोई समस्या नहीं है। – JimLockwood

उत्तर

7

यहां क्या हो रहा है यह है कि आप window.name तक पहुंच रहे हैं।

यह window पर एक पूर्वनिर्धारित संपत्ति है, इसलिए आपका हुस्ट var name वास्तव में एक नया चर नहीं बना रहा है। उस नाम के साथ वैश्विक दायरे में पहले से ही एक है और डिफ़ॉल्ट रूप से, इसमें एक खाली स्ट्रिंग मान है।

व्यवहार आप उम्मीद कर रहे थे पालन करने के लिए, आप name से एक चर अन्य नाम का उपयोग कर सकते हैं या एक समारोह के अंदर अपना कोड डाल:

function hoisting() { 
 
    console.log("A: My name is " + name); 
 

 
    function happy() { 
 
    console.log ("1: I am " + feeling); 
 
    var feeling = "happy"; 
 
    console.log ("2: I am " + feeling); 
 
    } 
 
    happy(); 
 

 
    var name = "Jim"; 
 
    console.log("B: My name is " + name); 
 
} 
 

 
hoisting();

+0

अच्छा, यह जानना अच्छा है कि मेरी अपेक्षाएं सही थीं। अब सीखने के लिए कि कीवर्ड, आदि चर नामों के रूप में इस्तेमाल नहीं किया जा सकता है। – JimLockwood

+2

@ जिमलॉकवुड यहां आपके महत्वपूर्ण पहचानकर्ताओं को वैश्विक पहचान से बाहर रखना है। :) – JLRishe

+1

@RobG क्या आपका मतलब विंडो में 'नाम' नहीं है? – fgb

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