Вход

Просмотр полной версии : Как вызвать функцию с другими параметрами в зависимости от условия


Basil_JS
01.03.2015, 13:00
Допустим, есть функция, принимающая параметр j и условие
if (num === 1)
{
function(1);
}
else if (num === 2)
{
function(1);
function(2);
}
else if (num === 3)
{
function(1);
function(2);
function(3);
}

Как записать это попроще и в обобщенному случае? То есть наподобие if (num === j)
{
сделай функцию j раз и с разными параметрами
}

Прошу помощи в этом. Просто не знаю даже как загуглить. Заранее спасибо.

laimas
01.03.2015, 14:15
Функция может быть одна, и несколько раз ее вызывать нет смысла, если изменять надо только параметры ее. Значит передавайте в качестве параметров массив, в контексте примера от 1 до N.

Basil_JS
01.03.2015, 14:58
А как записать не подскажете, ведь не так ведь - function ([1, 2, ...])?

laimas
01.03.2015, 15:08
Ну если вы знаете содержимое массива, то почему и нет, можете и так передать function ([1, 2, ...]).

Вопрос у вас резиновый, философский. Если по вашему описанию, в зависимости от значения некой переменной, которая может иметь значение от 1 до N нужно передать в функцию эту последовательность, то опишите ее в массиве, и тогда операнд условия будет определять количество элементов среза описанного массива. В этом случае прописывать явно элементы массива в передаваемом параметре функции не будет необходимости.

Basil_JS
01.03.2015, 16:12
У меня ошибка в общем-то получается. Если смиотреть конкретней
function append(i)
{
document.getElementById('x'+self.X[i]+'y'+self.Y[i]).appendChild(self.cell1[i]);
}
Условие:
if (num === 8)
{
append(1);
append(2);
append(3);
...
append(8);
}

laimas
01.03.2015, 16:23
Ну еще бы ее не было.

Еще раз сначала о методе передачи - у вас операнд определяет окончание последовательности, которую нужно передать в функцию. Так зачем повторять это число раз вызов функции, если можно передать срез массива заведомо известной коллекции или же просто передать этот операнд в функцию, выполнив это число раз действие в ней? При этом условий if (num === N) не требуется, просто append(num);

Что касается самой функции, то если это и все, то это бедлам.

ruslan_mart
01.03.2015, 16:51
Basil_JS,

for(var i = 1; i <= num; i++) {
myFunc(i);
}

Basil_JS
01.03.2015, 17:15
Мне придется делать это 241 раз, и я очень сильно упростил, так что вполне оправдано не писать вот такое

function(1);
...
function(241);

ruslan_mart
01.03.2015, 19:33
Basil_JS, лучше передавай тогда в ф-цию количество запусков, и пусть код внутри ф-ции выполняется столько количество раз, которому соответствует передаваемый аргумент.

function append(len) {
for(var i = 1; i <= len; i++) {
document.getElementById('x' + self.X[i] + 'y' + self.Y[i]).appendChild(self.cell1[i]);
}
}



Тогда условия можно будет писать просто вот так:

if(num == 8) {
append(8);
}

Но лучше тогда вообще условия убрать и использовать просто:

append(num);