我正在尝试使用以下函数获取row和col的值:
function find_winning_position(value, row, col) {
var i, j, chcount, emptycol, emptyrow;
chcount = 0;
emptycol = -1;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (document.getElementById(elementArray[i][j]).innerHTML == value) {
chcount++;
}
else if (document.getElementById(elementArray[i][j]).innerHTML.length == 0) {
emptycol = j;
}
}
if (chcount == 2 && emptycol != -1) {
row = i;
col = emptycol;
return row;
return col;
}
}
}
如何获得它?在这里做错了什么......任何人都可以解释一下吗?
var row = -1,
col = -1;
find_winning_position("O", row, col);
alert("row value" + row);
alert("col value" + col);
if (row != -1 && col != -1) {
//do some thing here
}
我在这里做错了什么?
答案 0 :(得分:3)
第一个问题是,当您已经return
编辑时,您正尝试return
。
第二个问题是你没有将函数的返回值赋值给任何东西。
return { "row": row, "col": col };
和
var position = find_winning_position("O", row, col);
row = position.row;
col = position.col;
您还需要处理函数不返回任何内容的情况(因为所有返回都在if语句中)。
答案 1 :(得分:1)
你只能返回一个值...这没有意义:
返回行; return col;
您的用法示例实际上并不期望返回值,它希望该函数更改它在全局范围内创建的值。
该函数实际上不会更改全局值,因为它正在传递具有相同名称的变量并与本地变量一起使用。
你能做什么:
一个。不要将row
和col
传递给函数,而是使用全局变量。然后无需从中返回任何内容。
湾返回一个具有两个属性的对象......
return { row: row, col: col };
答案 2 :(得分:1)
当您到达返回时执行结束,因此第二次返回无法访问。
return row;
return col; // will never hit this line
要返回两者,我可能会像这样把它们包起来:
return {
Row: row,
Col: col
};
如果if(...)
块没有评估为true,那么你也没有return语句来返回任何内容,这可能就是你没有看到任何内容的原因。
编辑 - 您的呼叫网站忽略返回的值,您依赖于改变参数。虽然它可能会起作用,也可能不行,但这是一种我很难避免的做法,如果没有在函数名中明确说明该函数将在调用站点改变状态。
我会更改函数以返回这样的对象:
return {
Row: i,
Col: emptycol
};
将呼叫站点更改为:
var row = -1,
col = -1;
var result = find_winning_position("O", row, col);
alert("row value" + result.Row);
alert("col value" + result.Col);
if (result.Row != -1 && result.Col != -1) {
//do some thing here
}
答案 3 :(得分:0)
SA功能只能返回一个值: -
如果你想返回row和col,那么你可以简单地连接两个并返回另一个
你可以将其拆分并获得两个值。
return row+"-"+col;
另一端将其拆分: -
var obj=find_winning_position("O", row, col);
var spl=obj.Split('-');
var newrow=spl[0];
var newcol=obj[1];