Как передать массив / значения в функцию Javascript - PullRequest
1 голос
/ 10 ноября 2011

Я изучаю 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-файле я использую оповещение для отображения переменной победителя. Но это, очевидно, не работает. Я понимаю, что это проблема с моим пониманием области видимости и глобальных переменных.

Ответы [ 3 ]

3 голосов
/ 10 ноября 2011

должно быть

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 голос
/ 10 ноября 2011

Вы должны понять концепцию scope . Переменные results и winner не одинаковы внутри и снаружи функции.

Кроме того, вам нужно вызвать функцию и вернуть что-то из нее, если вы хотите изменить значение переменных вне функции (если вы не используете глобальные переменные). Кажется, это трудно понять начинающим программистам, но простое определение функции ничего не делает.

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

Обратите внимание, что:

  • Я использовал для каждого цикла, который имеет более чистый синтаксис.
  • Я также перебираю 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();

Однако я бы рекомендовал не использовать глобальные переменные таким образом. Вот объяснение того, почему глобальные переменные плохие . Это для C ++, но это относится и к JavaScript.

1 голос
/ 10 ноября 2011

Вы перебираете массив result[0] (массив в result[0]), но используете длину массива result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...