2011-12-10 11 views
8
var str = 'internet'; 

performAction(function(str) { 
    console.log(str); 
}); 

क्या कोई निजी चर str होने और एक ही नाम के पैरामीटर के साथ कॉलबैक फ़ंक्शन होने में कोई समस्या है?जावास्क्रिप्ट: अन्य चर के समान नाम के साथ कॉलबैक फ़ंक्शन पैरामीटर?

धन्यवाद!

+0

नहीं - बस यह न भूलें कि यह वास्तव में एक ही चर नहीं है। –

+0

बहुत बहुत धन्यवाद! –

उत्तर

11

यह सिर्फ एक मानक दायरा स्थिति है - तथ्य यह है कि यह एक अज्ञात फ़ंक्शन अभिव्यक्ति है जो किसी अन्य फ़ंक्शन के पैरामीटर के रूप में पारित होती है इससे कोई फर्क नहीं पड़ता। ध्यान दें कि आपके performAction() फ़ंक्शन (जो आप नहीं दिखाते हैं) के भीतर str पर कोई पहुंच नहीं होगी जो कॉलबैक फ़ंक्शन का पैरामीटर है - यदि performAction() संदर्भ str यह वैश्विक "इंटरनेट" चर (या इसके स्थानीय परिभाषित अगर str)।

स्कोप उद्देश्यों के लिए एक फ़ंक्शन के पैरामीटर, उसी फ़ंक्शन के स्थानीय चर के समान होते हैं, जिसका अर्थ है कि वे बाहरी दायरे से उसी नाम के अन्य चरों को मुखौटा करते हैं - लेकिन व्यापक नामों में परिभाषित किए जाने पर भी अलग-अलग नामों वाले चरों को एक्सेस किया जा सकता है गुंजाइश। मैं एक पैरामीटर str कहा जाता है के साथ एक समारोह है, लेकिन मैं एक अलग str में गुजर रहा हूँ, जब मैं इसे कहते

var str = "internet"; 

(function(str) { 
    console.log(str); // "internet" 
    str = "local param"; 
    console.log(str); // "local param" 
})(str); 

console.log(str); // "internet" 

उस मामले में:

कहाँ यह भ्रामक हो सकता है अगर आप कुछ इस तरह करते हैं। ध्यान दें कि उस फ़ंक्शन के भीतर str बदलना केवल स्थानीय str बदलता है, न कि वैश्विक। वे दो अलग-अलग चर हैं ...

7

तकनीकी रूप से इसके साथ कोई समस्या नहीं है। फ़ंक्शन str लॉग करेगा जो वर्तमान में दायरे में है (आपका पैरामीटर)।

स्पष्ट कारणों से, यह एक अच्छा विचार नहीं माना जाता है। कम से कम, यह अपठनीय कोड के लिए बनाता है।

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