Javascript函数没有返回值

时间:2012-03-29 12:50:24

标签: javascript return-value

我正在尝试使用以下函数获取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
}​

我在这里做错了什么?

4 个答案:

答案 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)

  1. 你只能返回一个值...这没有意义:

    返回行; return col;

  2. 您的用法示例实际上并不期望返回值,它希望该函数更改它在全局范围内创建的值。

  3. 该函数实际上不会更改全局值,因为它正在传递具有相同名称的变量并与本地变量一起使用。

  4. 你能做什么:

    一个。不要将rowcol传递给函数,而是使用全局变量。然后无需从中返回任何内容。

    湾返回一个具有两个属性的对象......

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