2016-01-30 12 views
6

है ऐसे जावास्क्रिप्ट कोड:जावास्क्रिप्ट समारोह

function a() { 
    a = 3; 
    return a; 
} 
console.log(a()); 
console.log(a()); 

निष्पादन के बाद इसे बाहर प्रिंट: 3, प्रकार त्रुटि। किसी को भी क्यों, कृपया समझा सकते हैं

उत्तर

12

आप एक गुंजाइश मुद्दा

क्योंकि आप एक साथ "वर" आप वैश्विक अधिभावी कर रहे हैं "एक" चर (अपने कार्य हुआ करता था) का उपयोग नहीं किया है संख्या 3)।

जब आप इसे दूसरी बार निष्पादित करने का प्रयास करते हैं, तो यह अब एक फ़ंक्शन नहीं बल्कि एक संख्या है, जो प्रकार त्रुटि को फेंकता है।

function a() { 
    a = 3; // you just over-wrote a() 
    return a; 
} 

console.log(a()); // 3, but now "a" === number, not function 
console.log(a()); // ERROR, you treated "a" as a function, but it's a number 

आप क्या चाहते हैं

function a() { 
    var a = 3; // using var makes "a" local, and does not override your global a() 
    return a; 
} 

console.log(a()); // 3 
console.log(a()); // 3 

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

नोट वैश्विक क्षेत्र में वर का उपयोग कर अभी भी एक वैश्विक चर

+2

मैं पूरी तरह से [इस पुस्तक] की सिफारिश करता हूं (https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures) आप जेएस सीरीज़ से नहीं जानते –

+0

अच्छा लिंक! @ लियोनेलडामीनट सही है। मैं वास्तव में इसका उल्लेख किए बिना "गुंजाइश" के बारे में बात कर रहा हूं। ओपी में मौलिक मुद्दा गुंजाइश से संबंधित है। जवाब में थोड़ा स्पष्ट बना दिया। –

0

बनाता है कि आप एक चर के रूप में a स्थापित करने के लिए कोशिश कर रहे थे, तो var सामने की जरूरत है। चूंकि आपने ऐसा नहीं किया है, यह वैश्विक दायरे से अवगत कराया गया है, जिसमें यह window ऑब्जेक्ट का हिस्सा है, और आप इसे window.a के साथ एक्सेस कर सकते हैं। तो, सबसे अच्छा काम यह है कि अपने फ़ंक्शन की पहली बॉडी लाइन को यह कहने के लिए बदलें: var a = 3

+0

आपकी व्याख्या के लिए धन्यवाद दोस्तों यह एक कंपनी में पूछे गए प्रश्नों के ऑनलाइन उदाहरण में एक परीक्षण प्रश्न था –

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