没有什么能阻止你做上述事情,但请坚持下去!
有一些陷阱。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个全局变量 - 我很确定您不想这样做。
注意:我上面的示例假设您正在浏览器中运行代码,因此.如果您处于不同的环境中,这些变量将附加到该环境的全局上下文(即,在Node.js中,它将附加到该环境的全局上下文)。window
global
现在,您可以首先声明所有变量,然后将它们分配给相同的值,这样就可以避免这个问题。
var moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown;
moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
长话短说,两种方法都可以正常工作,但第一种方法可能会在代码中引入一些有害的错误。如果不是绝对必要的,不要犯用局部变量在全局命名空间中乱扔垃圾的罪过。
旁注:正如注释中指出的那样(这不仅仅是在这个问题的情况下),如果所讨论的复制值不是原始值,而是对象,那么您最好了解按值复制与按引用复制。每当分配对象时,都会复制对对象的引用,而不是实际对象。所有变量仍将指向同一个对象,因此一个变量中的任何更改都将反映在其他变量中,如果您打算复制对象值而不是引用,则会给您带来重大麻烦。