关于js里Object的一个问题,不解
发布于 8 年前 作者 im-here 3255 次浏览 来自 问答

先上代码

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 回复

@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一行的那个变量我后来没用到,我就直接注释了,导致后面的成全局的了 =。=

回到顶部