关于Javascript变量初始化的建议

adr*_*eld 5 javascript variable-initialization

在Javascript中可以声明多个变量如下吗?

var foo = bar = "Some value";
Run Code Online (Sandbox Code Playgroud)

adr*_*eld 5

除非你意识到你正在创建一个全局变量(无论如何,这通常被认为是不好的做法),但这并不好.

如果你来自像Java这样的语言,那么做以下事情是很自然的:

int foo = bar = 0;
Run Code Online (Sandbox Code Playgroud)

变量foobar都将使用值0初始化,两者都在当前范围内.但在Javascript中:

var foo = bar = 0;
Run Code Online (Sandbox Code Playgroud)

将在当前作用域内创建变量foo全局变量.


问题

在理解我的错误之前,我正在调试我正在写一个小时的游戏.我有一个像这样的代码:

function Player() {
    var posX = posY = 0;
}

function Bullet() {
    var posX = posY = 0;
}

var player = new Player;
var bullet = new Bullet;
Run Code Online (Sandbox Code Playgroud)

变量posY是全局的.更改posY值的一个对象上的任何方法也将更改另一个对象的方法.

发生了什么:每当子弹物体垂直移动通过​​屏幕(改变它应该是它自己的位置)时,玩家物体将被传送到子弹的Y坐标.

通过简单地将变量声明分离为:

var posX = 0;
var posY = 0;
Run Code Online (Sandbox Code Playgroud)

  • ...或`var posX = 0,posY = posX;` (5认同)