इस कोड के साथ:
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();
}
baz();
मुझे यह अप्रत्याशित परिणाम मिला है:
जब मैं कोड बदलता हूं:
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();
}
मुझे अपेक्षित परिणाम मिले:
इसके अलावा, अगर eval
आंतरिक फ़ंक्शन के भीतर कोई कॉल है , तो मैं अपने चर का उपयोग कर सकता हूं जैसा कि मैं करना चाहता हूं (इससे कोई फर्क नहीं पड़ता कि मैं क्या पास करता हूं eval
)।
इस बीच, फ़ायरफ़ॉक्स देव उपकरण दोनों परिस्थितियों में अपेक्षित व्यवहार देते हैं।
Chrome के साथ ऐसा क्या है जो डीबगर फ़ायरफ़ॉक्स की तुलना में कम सुविधाजनक तरीके से व्यवहार करता है? मैंने कुछ समय के लिए, संस्करण 41.0.2272.43 बीटा (64-बिट) सहित और इस व्यवहार को देखा है।
क्या यह है कि क्रोम का जावास्क्रिप्ट इंजन "फलैटेंस" को कार्य करता है जब यह कर सकता है?
दिलचस्प बात यह है कि अगर मैं एक दूसरे चर को जोड़ता हूं जो आंतरिक फ़ंक्शन में संदर्भित है, तो x
चर अभी भी अपरिभाषित है।
मैं समझता हूं कि एक इंटरैक्टिव डिबगर का उपयोग करते समय अक्सर गुंजाइश और चर परिभाषा के साथ quirks होते हैं, लेकिन मुझे ऐसा लगता है कि भाषा विनिर्देश के आधार पर इन quirks के लिए "सर्वश्रेष्ठ" समाधान होना चाहिए। इसलिए मैं बहुत उत्सुक हूँ अगर यह फ़ायरफ़ॉक्स की तुलना में क्रोम अनुकूलन के कारण है। और यह भी कि इन अनुकूलन को विकास के दौरान आसानी से अक्षम किया जा सकता है या नहीं (शायद देव उपकरण खुले होने पर उन्हें अक्षम होना चाहिए)।
इसके अलावा, मैं इसे ब्रेकपॉइंट के साथ-साथ debugger
स्टेटमेंट के साथ भी पुन: पेश कर सकता हूं ।
debugger;
रेखा वास्तव में अंदर से नहीं बुलाई गई है bar
। तो डीबगर में रुकने पर स्टैक ट्रेस देखें: क्या bar
स्टैकट्रेस में उल्लिखित फ़ंक्शन है? अगर मैं सही हूं, तो स्टैकट्रेस को कहना चाहिए कि यह लाइन 5 पर रुकी हुई है, लाइन 7 पर, लाइन 9 पर।
temp1
कंसोल से जुड़ा हुआ है और आप इसका उपयोग गुंजाइश प्रविष्टि तक पहुंचने के लिए कर सकते हैं।