CNode

关于js里Object的一个问题,不解

问答
Iim-here发布于11 年前最后回复11 年前10 回复3788 浏览0 收藏

先上代码

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)

M
MiguelValentine#1·11 年前

function funA(){}

I
im-here#2·11 年前
引用 MiguelValentinefunction funA(){}

@MiguelValentine 额,实例代码,少了个function

Z
zstxt1989#3·11 年前

在其他地方定义了p2吧?测试不会出现你所说的情况。

I
im-here#4·11 年前
引用 zstxt1989在其他地方定义了p2吧?测试不会出现你所说的情况。

@zstxt1989 没有在别的地方定义p2,我也觉得奇怪了。

M
MiguelValentine#5·11 年前
console.log(p2);
            ^

ReferenceError: p2 is not defined
Z
zstxt1989#6·11 年前
引用 im-here@zstxt1989 没有在别的地方定义p2,我也觉得奇怪了。

@imhered 把funA里的p2换个名字试试?看还能不能取到p2

I
im-here#7·11 年前

原始代码

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确实有值
	};
I
im-here#8·11 年前
引用 zstxt1989@imhered 把funA里的p2换个名字试试?看还能不能取到p2

@zstxt1989 奇怪了,我把funA里面的p2换了个名字,在funB里直接取p2还是有值,而且和funA里的值一样。

Z
zstxt1989#9·11 年前
引用 im-here@zstxt1989 奇怪了,我把funA里面的p2换了个名字,在funB里直接取p2还是有值,而且和funA里的值一样。

@imhered 肯定有哪个地方声明了 incomeArray 全局变量,贴一下 level.getDunSweepRaidData 的源码看看

I
im-here#10·11 年前
引用 zstxt1989@imhered 肯定有哪个地方声明了 incomeArray 全局变量,贴一下 level.getDunSweepRaidData 的源码看看

@zstxt1989 确实,找到原因。 在level里面一个var声明了多个变量,包含incomeArray ,结果和var一行的那个变量我后来没用到,我就直接注释了,导致后面的成全局的了 =。=

参与回复
登录后即可参与回复。登录