gpt4 book ai didi

javascript - 函数在不应该设置变量时设置变量

转载 作者:行者123 更新时间:2023-11-28 12:48:57 26 4
gpt4 key购买 nike

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
}

根据每个敌人阵列的基地生成敌人统计数据的脚本。 ( Angular 色扮演游戏)问题是,当我期望它返回一个包含新统计数据的数组时,它还将敌人数组设置为新数组。为什么是这样?显然你可以看到由此造成的问题(基地被改变,这样弱小的敌人就可以变得 super 强大)。我如何阻止它在 en (敌人值数组)中设​​置数组?

最佳答案

在 JavaScript 中对象是通过引用传递的。这意味着您对 genEnemy 内的数组 a 所做的任何更改都会反射(reflect)在传入的原始数组上。您需要制作该数组的深拷贝并返回此副本复制。这是一个可以为您完成此操作的函数:

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;
}

genEnemy内,你可以这样做:

a = cloneArray(a);
// make changes to the new array
return a;

另外,不要忘记在代码中包含分号。尽管它们是可选的,但如果您养成忽略它们的习惯,您可能会遇到意想不到的问题。

关于javascript - 函数在不应该设置变量时设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com