如何将数组/值传递给Javascript函数

时间:2011-11-10 15:14:21

标签: javascript scope

我正在学习使用在线资源的项目的Javascript,但我不知道如何使这个功能正常工作。

var results =[[a1,a2,a3,a4,a5]];
var winner = 0;

function checkWinner (results)
{ 
  for (var i = 0; i < results.length; i++)
    if (results[0][i] > 50)
    {
      winner = results[0][i];

    }
}

在功能之后,我使用:     checkWinner(结果);

在HTML文件中,我使用alert来显示变量获胜者。但它显然不起作用。我意识到这是我对范围和全局变量的理解的问题。

3 个答案:

答案 0 :(得分:3)

应该是

var Results =[[a1,a2,a3,a4,a5]];
var winner = 0;

function checkWinner (results)
{ 
  for (var i = 0; i < results[0].length; i++)
    if (results[0][i] > 50)
    {
      winner = results[0][i];

    }
}

checkWinner(Results);

为避免名称冲突,请从大写字母中命名全局变量。 同样在您的代码中,您调用“父”数组的长度。您需要指定“Child”数组的长度

答案 1 :(得分:1)

您正在迭代result[0]数组(result[0]中的数组),但使用result数组的长度。

答案 2 :(得分:1)

你必须理解scope的概念。变量resultswinner在函数内部和外部不同。

此外,如果要更改函数外部的变量值,除非使用全局变量,否则必须调用函数并返回。 )。对于新手程序员来说,这似乎很难理解,但仅仅定义一个函数并没有做任何事情。

var results =[[a1,a2,a3,a4,a5]];

function checkWinner (results)
{ 
    for (var result in results[0]) 
    {
        if (result > 50)
        {
            return result;
        }
    }
}

var winner = checkWinner(results);

请注意:

  • 我为每个循环使用了a,它具有更清晰的语法。
  • 我也在迭代results[0]而不是results,因为无论出于什么原因你都有一个嵌套数组。
  • 因为您的函数有一个名为results的参数,所以它要求您传递全局results,尽管它是全局的。另一种方法:

var results = [[a1,a2,a3,a4,a5]];

function checkWinner()
{ 
    for (var result in results[0]) 
    {
        if (result > 50)
        {
            winner = result;
            return;
        }
    }
}

checkWinner();

但是,我建议不要这样使用全局变量。以下是对global variables are bad原因的解释。它适用于C ++,但也适用于JavaScript。