Hiçbir şey yukarıdakileri yapmanı engellemez, ama dur!
Bazı yakalar var. Javascript'te atama sağdan sola olduğundan yazdığınızda:
var moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
etkili bir şekilde çevirir:
var moveUp = (moveDown = (moveLeft = (moveRight = (mouseDown = (touchDown = false)))));
etkili bir şekilde şu anlama gelir:
var moveUp = (window.moveDown = (window.moveLeft = (window.moveRight = (window.mouseDown = (window.touchDown = false)))));
Yanlışlıkla, 5 global değişken oluşturdunuz - yapmak istemediğinizden emin olduğum bir şey.
Not: Yukarıdaki örneğim, kodunuzu tarayıcıda çalıştırdığınızı varsayar window
. Eğer farklı bir ortamda olsaydınız, bu değişkenler o ortam için ne olursa olsun küresel bağlamı eklerdi (örneğin, Node.js'de, o ortam için global
hangi küresel bağlamı ekleyeceğini ).
Şimdi önce tüm değişkenlerinizi bildirebilir ve sonra aynı değere atayabilirsiniz ve problemden kaçınabilirsiniz.
var moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown;
moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
Uzun lafın kısası, her iki yol da iyi çalışır, ancak ilk yol potansiyel olarak kodunuzda bazı zararlı hatalar getirebilir. Kesinlikle gerekli değilse, küresel ad alanını yerel değişkenlerle doldurmanın günahını yapmayın.
Sidenote: Yorumlarda belirtildiği gibi (ve bu sadece bu soruda değil), eğer söz konusu kopyalanan değer ilkel bir değer değil, bir nesne ise, değere göre kopyala referansa göre kopyalamayı daha iyi bilirsiniz. Nesneleri her atadığınızda, nesneye yapılan başvuru gerçek nesne yerine kopyalanır. Tüm değişkenler yine de aynı nesneyi gösterecektir, bu nedenle bir değişkenteki herhangi bir değişiklik diğer değişkenlere yansıtılacaktır ve niyetiniz referansı değil nesne değerlerini kopyalamaksa büyük bir baş ağrısına neden olacaktır.