/ / कार्यों के लिए एक स्थानीय दायरा जोड़ना - जावास्क्रिप्ट

कार्यों के लिए एक स्थानीय दायरा जोड़ना - जावास्क्रिप्ट

मैं अपने सभी कार्यों के शीर्ष पर निम्नलिखित जोड़ने की आदत में हूं:

var local = {};

इस तरह, मैं स्पष्ट रूप से अपने सभी चर का दायरा करता हूं। उदाहरण के लिए:

for (local.i=0; local.i<x; local.i++) {} // local scope: good!
for (i=0; i<x; i++) {} // accidental global scope: bad!

प्रश्न: क्या विभिन्न स्थानीय = {} को शामिल करने के लिए फ़ंक्शन प्रोटोटाइप को बदलने का कोई तरीका है; इसकी परिभाषा के हिस्से के रूप में? इस तरह से मैं मान सकता हूं कि "स्थानीय" का अर्थ स्पष्ट रूप से स्थानीय दायरे में है।

उत्तर:

जवाब के लिए 3 № 1

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

अगर यह संभव था तो एक पल के लिए कल्पना कीजिए। आपके द्वारा लोड किया गया कोई भी कोड संभावित रूप से स्कॉप्ड वेरिएबल्स के उद्देश्य को हराकर किसी भी अन्य चरणीय दायरे को दूषित कर सकता है।

The Function.prototype क्योंकि मूलरूप विरासत कुछ भी नहीं चर गुंजाइश के साथ नहीं है मदद मिलेगी ।

अपनी चाल की रक्षा के लिए i इसे एक में डाल कर local वस्तु doesn "टी कुछ भी हल । यह बस से समस्या ले जाता है i चर को local चर, और अभी भी doesn "टी आप का उपयोग करने से रखने i के बजाय local.i.

सहित "use strict"; सहायक त्रुटि संदेश प्रदान करके मदद कर सकते हैं, आप ध्यान रखें कि यह कोड भंग कर सकते हैं कुछ स्थितियों में व्यवहार में परिवर्तन करने की आवश्यकता है ।


उत्तर № 2 के लिए 1

नहीं, तुम "टी यह कर सकते हैं । आप कर सकते है "टी के साथ मनमाना कार्य और गंदगी में कोड इंजेक्षन जो अपने बदलकर स्थानीय क्षेत्र Function.prototype, और वह "s a अच्छा बात.

इसके अलावा, आप कैसे लागू का उपयोग करते हुए local स्थानीय चर के लिए वैसे भी ऑब्जेक्ट? और आप पैरेंट क्षेत्र के माध्यम से चर लुकअप की अनुमति कैसे देंगे, जैसे:

function f() {
var a = 5;
return function g(b) {
return a + b;
};
}

आपके समाधान में, आप "d एक local ऑब्जेक्ट में f तथा g कार्य करता है, लेकिन local में चर g छिपाना होगा जनक "चर एस.. ।

function f() {
var local = { a : 5 };
return function g(b) {
// This declaration hides the parent"s declaration
var local = { b : b };
// How would local.a be found?
return local.a + local.b;
};
}

वहां अपने मूल समस्या के लिए एक बहुत आसान समाधान हालांकि: बस के साथ सख्त मोड सक्षम "use strict". इस तरह, आप गलती से वैश्विक क्षेत्र में एक चर रिसाव जब आप एक त्रुटि प्राप्त करें ।उदाहरण के लिए, अपने दूसरे नमूना एक फेंक देंगे ReferenceError जब वह अघोषित प्रवेश करने का प्रयास करता है i चर (के बजाय एक नया वैश्विक चर बनाने की) ।

ध्यान दें कि सख्त मोड बस दुर्घटना वैश्विक चर को रोकने से आगे चला जाता है, इस पर पढ़ें तो आप परिणामों को समझते हैं!