कुछ भी नहीं आपको ऊपर करने से रोकता है, लेकिन पकड़ो!
कुछ गोत्र हैं। जब आप लिखते हैं तो जावास्क्रिप्ट से असाइनमेंट दाईं से बाईं ओर होता है:
var moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
यह प्रभावी रूप से अनुवाद करता है:
var moveUp = (moveDown = (moveLeft = (moveRight = (mouseDown = (touchDown = false)))));
जो प्रभावी रूप से अनुवाद करता है:
var moveUp = (window.moveDown = (window.moveLeft = (window.moveRight = (window.mouseDown = (window.touchDown = false)))));
अनजाने में, आपने अभी 5 वैश्विक चर बनाए हैं - कुछ ऐसा जो मुझे यकीन है कि आप करना नहीं चाहते हैं।
नोट: मेरा उपरोक्त उदाहरण मानता है कि आप ब्राउज़र में अपना कोड चला रहे हैं, इसलिए window। यदि आप एक अलग वातावरण में होते तो ये चर उस पर्यावरण के लिए जो भी वैश्विक संदर्भ होता है (यानी, Node.js में, यह globalउस पर्यावरण के लिए वैश्विक संदर्भ होता है) के साथ संलग्न होता ।
अब आप पहले अपने सभी चर घोषित कर सकते हैं और फिर उन्हें उसी मूल्य पर असाइन कर सकते हैं और आप समस्या से बच सकते हैं।
var moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown;
moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
लंबी कहानी छोटी, दोनों तरीके बस ठीक काम करेंगे, लेकिन पहला तरीका संभवतः आपके कोड में कुछ खतरनाक कीड़े पेश कर सकता है। यदि आवश्यक नहीं है तो स्थानीय चर के साथ वैश्विक नाम स्थान को गंदे करने का पाप न करें।
सिडेनोट: जैसा कि टिप्पणियों में बताया गया है (और यह सिर्फ इस सवाल के मामले में नहीं है), अगर प्रश्न में कॉपी किया गया मूल्य एक आदिम मूल्य नहीं था, लेकिन एक वस्तु के बजाय, आप संदर्भ के आधार पर मूल्य बनाम कॉपी द्वारा प्रतिलिपि के बारे में बेहतर जानते हैं। जब भी ऑब्जेक्ट्स असाइन करते हैं, तो ऑब्जेक्ट का संदर्भ वास्तविक ऑब्जेक्ट के बजाय कॉपी किया जाता है। सभी चर अभी भी एक ही वस्तु को इंगित करेंगे, इसलिए एक चर में कोई भी परिवर्तन दूसरे चर में परिलक्षित होगा और आपको एक प्रमुख सिरदर्द का कारण होगा यदि आपका इरादा ऑब्जेक्ट मूल्यों की प्रतिलिपि बनाना था और संदर्भ नहीं।