Автор: 
Алексей Голубев
![]() Сайт: http://www.frnet.narod.ru/
Сайт: http://www.frnet.narod.ru/
![]() 
 
Зачастую бывает необходимо создавать такие функции, количество аргументов которых неопределено. Примером такой функции может послужить создание функции, выводящей на экран браузера меню, при перемножении, 
сложении неопределенного количества чисел, случай, когда в качестве аргументов функции выступают элементы массива и т.д. и т.п. В качестве примера мы рассмотри функцию, которая будет выводить на экран список 
ссылок. 
 ![]()
 1. Интерфейс функции. 
 ![]()
 Для применения функции нужно ввести следующий фрагмент: 
 ![]()
  
<SCRIPT language=JavaScript>
 menu(
 "Раздел1", "item1.htm",
 ...
 "Разделn", "itemn.htm"
 ); 
 </SCRIPT>  ![]()
 То есть, мы записывает в аргументах функции 
название разделов и ссылки им соответствующие (в нужном количестве, конечно), а функция строит на экране нужный список. 
 ![]()
 2. Сама функция.
 ![]()
 
Сама функция должана:
 А) получать количество аргументов;
 Б) выполняться при количестве аргументов больше 1;
 В) выводить на экран меню.
 Рассмотрим все по порядку. 
 ![]()
 
А) Получение количества аргументов. 
 ![]()
 Получение количества аргументов можно организовать одной строкой следующего вида:  var x = имя_функции.arguments.length; 
![]()
 В нашем случает (так как мы назвали функцию menu) строка будет выглядеть следующим образом: 
 ![]()
  var x = menu.arguments.length; 
![]()
 При выполнении данной строки количество элементов функции menu будет заноситься в переменную x. 
 ![]()
 Б) Условие выполнения функции. 
 ![]()
 Если у нас количество аргументов будет равно 1 (или 0), то функция будет выполняться с ошибками, поэтому главную часть функции нужно заключить в оператор условия if следующим 
образом: 
 ![]()
  if (x > 1)
 {
 //какие-то действия
 } ![]()
 В) Какие-то действия. 
 ![]()
 
Что надо еще определить - это четно ли число аргументов, если нет, то мы отбрасываем последний аргумент: 
 ![]()
  if(x%2) x--; ![]()
 
Мы будет выводить маркированный список, поэтому должны в первую очередь записать открывающий список тег (для красоты сделаем маркеры квадратными): 
 ![]()
  document.write("<ul 
type=square>"); ![]()
 Теперь можно приступать к непосредственному выводу элементов списка. Делать мы это будем естественно при помощи цикла: 
 ![]()
  
for(var i=0; i<x; i+=2) 
 document.write("<LI><A href="+menu.arguments[i+1]+">" + menu.arguments[i]+"</A>"); ![]()
 Свойство arguments объекта menu является массивом, 
поэтому обращаться с ним мы будем соответственно. 
 ![]()
 И в заключении записываем закрывающий список тег: 
 ![]()
  document.write("</ul>"); 
![]()
 В итоге мы получили следующую функцию: 
 ![]()
  function menu()
 {
 // число аргументов функции
 var x = menu.arguments.length;
 
// Функция работает, если число аргументов больше одного
 if (x > 1)
 {
 // Если число аргументов нечетно,
 //последний аргумент игнорируем
 if(x%2) x--;
 
 // Строим начальный тег 
списка
 document.write("<UL type=disc>");
 
 // Построение списка
 for(var i=0; i<x; i+=2)>br>document.write("<LI><A href="+menu.arguments[i+1]+">"+
 menu.arguments[i]+"</A>");
 
 // Строим конечный тег списка
 document.write("</UL>");
 }
 } ![]()
 Вот все. Вы можете таким образом выводить списки и другого вида (при помощи тега select, 
с использованием стилей и т.п.). Если возникли вопросы и есть предложения по улучшению функции пишите. 
 ![]()
 P.S. Вы можете cкачать этот пример со страницы: http://www.frnet.narod.ru/script.html.
 
Или задать вопрос автору и ведущему раздела alexey-golubev@mail.ru 
Обсудить 
в форуме...>>>>