Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.03.2015, 13:00
Интересующийся
Отправить личное сообщение для Basil_JS Посмотреть профиль Найти все сообщения от Basil_JS
 
Регистрация: 04.09.2014
Сообщений: 12

Как вызвать функцию с другими параметрами в зависимости от условия
Допустим, есть функция, принимающая параметр 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 раз и с разными параметрами
}

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

Последний раз редактировалось Basil_JS, 01.03.2015 в 13:04.
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2015, 14:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Функция может быть одна, и несколько раз ее вызывать нет смысла, если изменять надо только параметры ее. Значит передавайте в качестве параметров массив, в контексте примера от 1 до N.
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2015, 14:58
Интересующийся
Отправить личное сообщение для Basil_JS Посмотреть профиль Найти все сообщения от Basil_JS
 
Регистрация: 04.09.2014
Сообщений: 12

А как записать не подскажете, ведь не так ведь - function ([1, 2, ...])?
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2015, 15:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Вопрос у вас резиновый, философский. Если по вашему описанию, в зависимости от значения некой переменной, которая может иметь значение от 1 до N нужно передать в функцию эту последовательность, то опишите ее в массиве, и тогда операнд условия будет определять количество элементов среза описанного массива. В этом случае прописывать явно элементы массива в передаваемом параметре функции не будет необходимости.
Ответить с цитированием
  #5 (permalink)  
Старый 01.03.2015, 16:12
Интересующийся
Отправить личное сообщение для Basil_JS Посмотреть профиль Найти все сообщения от Basil_JS
 
Регистрация: 04.09.2014
Сообщений: 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);
}
Ответить с цитированием
  #6 (permalink)  
Старый 01.03.2015, 16:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну еще бы ее не было.

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

Что касается самой функции, то если это и все, то это бедлам.
Ответить с цитированием
  #7 (permalink)  
Старый 01.03.2015, 16:51
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Basil_JS,

for(var i = 1; i <= num; i++) {
    myFunc(i);
}
Ответить с цитированием
  #8 (permalink)  
Старый 01.03.2015, 17:15
Интересующийся
Отправить личное сообщение для Basil_JS Посмотреть профиль Найти все сообщения от Basil_JS
 
Регистрация: 04.09.2014
Сообщений: 12

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

function(1);
...
function(241);
Ответить с цитированием
  #9 (permalink)  
Старый 01.03.2015, 19:33
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение для Safari. Как вызвать функцию из popover в global page? housewm Opera, Safari и др. 0 21.12.2013 06:07
как передать измененные параметры AJAX в другую функцию? akselei Элементы интерфейса 2 19.10.2013 12:46
Указание ссылки на функцию с параметрами user_i Общие вопросы Javascript 5 06.02.2012 12:08
Как вызвать callback функцию oke11o jQuery 12 17.01.2012 13:36
Как вызвать функцию если менять надо не все параметры? britanik Общие вопросы Javascript 3 07.03.2009 23:13