Ano*_*ous 0 javascript arrays variables return
function genEnemy(a) {
//javascript:alert(en[0]+'\n'+genEnemy(en[0])+'\n'+en[0])
with (Math) {
a[1]=round(a[1]*(.5+random()))
a[2]=round(a[2]*(1+random()))
for (var b=0;b<5;b++) a[3][b]=round(a[3][b]*(a[3][b]/2+random()*a[3][b]/10))
for (var b=0;b<a[4].length;b++) random()<it[a[4][b]][3]/10?a[4][b]=0:0
}
return a
}
Run Code Online (Sandbox Code Playgroud)
根据每个敌人阵列的基础生成敌人的统计数据的脚本.(RPG游戏)问题是,当我期望它返回包含新统计数据的数组时,它还将敌人数组设置为新数组.为什么是这样?显然你可以看到问题是如何由此引起的(基础被改变,所以弱小的敌人可以变得更加强大).如何阻止它在en(敌人值数组)中设置数组?
对象在JavaScript中通过引用传递.这意味着您对a内部数组所做的任何更改genEnemy都会反映在传入的原始数组中.您需要制作数组的深层副本并返回此副本.这是一个可以为您完成的功能:
function cloneArray(a) {
var b = [];
for (var i = 0; i < a.length; i++)
if (a[i] instanceof Array)
b[i] = cloneArray(a[i]);
else
b[i] = a[i];
return b;
}
Run Code Online (Sandbox Code Playgroud)
在里面genEnemy,你会做:
a = cloneArray(a);
// make changes to the new array
return a;
Run Code Online (Sandbox Code Playgroud)
另外,不要忘记在代码中包含分号.即使它们是可选的,如果您养成省略它们的习惯,也可能遇到意想不到的问题.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |