JavaScript 数组 : problems with array declaration and access

标签 javascript arrays scope declaration

我目前正在做一个小项目以学习 Js 和 OOP。但是我有一个问题,让我解释一下不同的步骤:

1) 我的构造函数:

function Ammo(ammoId,posX,posY){
    this.id=ammoId;
    this.x=posX;
    this.y=posY;
    $('body').append('<div class="ammo ammo'+this.id+'"></div>');
}

2) 原型(prototype):

Ammo.prototype.position = function(){
    $('.ammo'+this.id).css({
        'top': this.y+"px",
        'left': this.x+"px"
    });
}

Ammo.prototype.ammomove = function(){
    this.y-=1;
    this.position();
}

3) 调用:

ammo=[];
var a=1;
function createAmmo(){
    var ammoX=main.x;
    var ammoY=main.y;
    ammo[a] = new Ammo(a, ammoX, ammoY);
    ammo[a].position();
    var animAmmo= setInterval("ammo["+a+"].ammomove()",5);
    a++;
}
createAmmo();

我的程序完美运行。但是当我用这种语法声明我的数组时:

var ammo = [];

它不起作用,我有错误“ammo is not defined”,而这个有效:

ammo = [];

有人有想法吗?谢谢!

编辑:这是我的 JsFiddle:https://jsfiddle.net/seabon/c057f1oj/

按空格键调用 createAmmo()

最佳答案

var 关键字定义局部变量。这意味着变量仅在当前范围内可见。

当您使用 ammo = []; 时,它会创建全局变量,可以从 createAmmo() 访问。

但是当您使用 var ammo = []; 时,它会创建局部变量。在同一范围内声明了方法 createAmmo(),但您无法访问它 createAmmo 的主体范围。

将其作为参数传递给 createAmmo

关于JavaScript 数组 : problems with array declaration and access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29228371/

相关文章:

javascript - 使用 jsTree XML 模块

php - 如何将 php 数组中的 null 值转换为空字符串?

java - 深度复制对象数组

javascript - 谷歌地图 : Passing extra arguments into GeoCoder for InfoWindows

Javascript for-in 全局作用域

javascript - Angular 智能感知 VS2015 RTM

ruby 错误 : Not Finding Variable Defined in Loop

powershell - 从模块修改和恢复 PowerShell 提示符

javascript - 在 jQuery UI Datepicker 和 asp.net 日历上禁用自定义日期

java - 如何只返回以标点符号结尾的字符串?