没有什么能阻止你做上述事情,但坚持住!
有一些陷阱。Javascript 中的赋值是从右到左的,所以当你写的时候:
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;
长话短说,两种方法都可以正常工作,但第一种方法可能会在您的代码中引入一些有害的错误。如果不是绝对必要的话,不要犯用局部变量乱扔全局命名空间的罪过。
旁注:正如评论中所指出的(这不仅仅是在这个问题的情况下),如果所复制的值不是原始值而是对象,那么您最好了解按值复制与按引用复制。每当分配对象时,都会复制对对象的引用而不是实际对象。所有变量仍将指向同一个对象,因此一个变量的任何更改都将反映在其他变量中,如果您的意图是复制对象值而不是引用,那么您会非常头疼。