关于js里Object的一个问题,不解
先上代码
function funA(){
xxxxxxx
return {
p1:v1,//int类型
p2:v2//array类型
};
}
var result1 = funA();//这里的resut1就一个Object,包含一个int类型和一个array类型的没错吧。
var result2 = funB(1, p2, cb);
我发现的问题在于:我的funB里第二个参数我是想调用funA里返回值的p2(即resutl.p2),正常写法应该是 var result2 = funB(1, result1.p2, cb); 这样对吧,但是我当时不知道什么情况,就直接写成了最上面的那样,而且p2我没有在任何地方定义,居然p2里面有值,它的值就是 result1.p2的值。 我想问问,这是什么原因呢?
10 回复
function funA(){}
@MiguelValentine 额,实例代码,少了个function
在其他地方定义了p2吧?测试不会出现你所说的情况。
@zstxt1989 没有在别的地方定义p2,我也觉得奇怪了。
console.log(p2);
^
ReferenceError: p2 is not defined
@imhered 把funA里的p2换个名字试试?看还能不能取到p2
原始代码
Player.prototype.dunSweepRaid = function (udata, blob, index, callback) {
//sweepRaidData 结构{incomeArray,stamina}
var sweepRaidData = level.getDunSweepRaidData(index, udata.level),
urm = new UserResManager(EntityCODE.ResWay.dunSweep),
blobParams, udataParams;
if (customFunc.isEmpty(sweepRaidData))
return callback(EntityCODE.RETURNCODE.MISTAKE_CONF_TB, null);
if (udata.power < sweepRaidData.stamina)
return callback(EntityCODE.RETURNCODE.POWER_SHORTAGE, null);
//将扫荡获得的资源加入玩家背包
var result = urm.addRes2Bag(udata, blob, incomeArray, index);
//我断点看该处的incomeArray确实有值
};
@zstxt1989 奇怪了,我把funA里面的p2换了个名字,在funB里直接取p2还是有值,而且和funA里的值一样。
@imhered 肯定有哪个地方声明了 incomeArray 全局变量,贴一下 level.getDunSweepRaidData 的源码看看
@zstxt1989 确实,找到原因。 在level里面一个var声明了多个变量,包含incomeArray ,结果和var一行的那个变量我后来没用到,我就直接注释了,导致后面的成全局的了 =。=