आपके द्वारा इस तरह की समस्याएं देखने का कारण यह है कि कंसोल स्वयं उस संदर्भ के वैश्विक दायरे का अनुकरण करने का प्रयास करता है जिसे आप वर्तमान में लक्षित कर रहे हैं। यह कंसोल में लिखने वाले कथनों और अभिव्यक्तियों से वापसी मूल्यों को पकड़ने की कोशिश करता है, ताकि परिणाम के रूप में दिखाई दे। उदाहरण के लिए, लें:
> 3 + 2
< 5
यहां, यह निष्पादित करता है जैसे कि यह एक अभिव्यक्ति थी, लेकिन आपने इसे ऐसे लिखा है जैसे यह एक बयान था। सामान्य लिपियों में, मान को छोड़ दिया जाएगा, लेकिन यहां, कोड को आंतरिक रूप से मंगवाना चाहिए (जैसे कि एक फ़ंक्शन संदर्भ और कथन के साथ पूरे विवरण को लपेटना return
), जो सभी प्रकार के अजीब प्रभावों का कारण बनता है, जिसमें आप समस्याओं का सामना कर रहे हैं।
यह भी एक कारण है कि स्क्रिप्ट में कुछ नंगे ES6 कोड ठीक काम करते हैं, लेकिन क्रोम देव टूल्स कंसोल में नहीं हैं।
नोड और क्रोम कंसोल में इसे निष्पादित करने का प्रयास करें:
{ let a = 3 }
नोड या एक <script>
टैग में यह ठीक काम करता है, लेकिन कंसोल में, यह देता है Uncaught SyntaxError: Unexpected identifier
। यह आपको स्रोत के लिए एक लिंक भी देता है, VMxxx:1
जिसके रूप में आप मूल्यांकन किए गए स्रोत का निरीक्षण करने के लिए क्लिक कर सकते हैं, जो इस प्रकार है:
({ let a = 3 })
तो इसने ऐसा क्यों किया?
उत्तर यह है कि इसे आपके कोड को एक अभिव्यक्ति में बदलने की आवश्यकता है ताकि परिणाम कॉलर को वापस किया जा सके और कंसोल में प्रदर्शित किया जा सके। आप इसे कोष्ठक में कथन को लपेटकर कर सकते हैं, जो इसे एक अभिव्यक्ति बनाता है, लेकिन यह ब्लॉक को सिंटैक्टिक रूप से गलत बनाता है (एक अभिव्यक्ति में ब्लॉक घोषणा नहीं हो सकती है)।
कंसोल कोड के बारे में होशियार होकर इन बढ़त के मामलों को ठीक करने की कोशिश करता है, लेकिन यह इस उत्तर के दायरे से परे है, मुझे लगता है। आप यह देखने के लिए बग दर्ज कर सकते हैं कि कुछ ऐसा है जिसे वे ठीक करने पर विचार करेंगे।
यहाँ कुछ इसी तरह का एक अच्छा उदाहरण है:
https://stackoverflow.com/a/28431346/46588
अपने कोड का काम करने का सबसे सुरक्षित तरीका यह सुनिश्चित करना है कि इसे एक अभिव्यक्ति के रूप में चलाया जा सकता है और SyntaxError
स्रोत लिंक का निरीक्षण करके यह देखने के लिए कि वास्तविक निष्पादन कोड क्या है और इससे इंजीनियर को एक समाधान उल्टा पड़ता है। आमतौर पर इसका अर्थ है रणनीतिक रूप से रखे गए कोष्ठकों की एक जोड़ी।
संक्षेप में: कंसोल वैश्विक निष्पादन संदर्भ को यथासंभव सटीक रूप से अनुकरण करने की कोशिश करता है, लेकिन v8 इंजन और जावास्क्रिप्ट शब्दार्थ के साथ बातचीत की सीमाओं के कारण यह कभी-कभी मुश्किल या हल करना असंभव होता है।