Раздел: Сайтостроение / JavaScript /

Функции в JavaScript

Что такое JavaScript Что такое JavaScript

Небольшая книга о JavaScript, которая поможет вам в изучении JavaScript. В книге и рассылке сведения для начинающих: что такое JavaScript, как это работает, письма, которые помогут принять решение, надо ли вам это или нет, а также полезные ссылки на обучающие материалы. Подробнее...

Если вы совсем не знаете, что такое подпрограммы в программировании, и, в частности, функции, то переходите по указанным ссылкам и изучайте. Здесь говорим только об особенностях использования функций в JavaScript.

Как всегда напоминаю, что полный обучающий курс по JavaScript можно найти здесь:

>>> JavaScript, jQuery и Ajax с нуля до гуру >>>

Поскольку JavaScript основан на С++, то в нём также нет такого понятия, как “процедура”, а все подпрограммы исполняются исключительно как функции.

Функции могут быть встроенными (то есть “входить в комплект” языка программирования, а могут быть пользовательскими (то есть функциями, которые создаёт сам программист).

Определение функций в JavaScript

Функция в JavaScript определяется с помощью ключевого слова function, после которого следуют имя функции (допустимый в JavaScript идентификатор), список параметров функции (аргументов), и тело функции (исходный код функции). Синтаксис:

function Имя(Параметры)
{
  //Тело функции
}

Функция может не иметь параметров. В этом случае она определяется так:

function Имя()
{
  //Тело функции
}

То есть круглые скобки обязательны, независимо от того, есть у функции параметры или нет.

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

function MsgToScreen(Msg, Num)
{
  document.write(Msg + ': ' + Num)
}

Здесь мы объявляем и определяем функцию с именем MsgToScreen, в которую можно передавать два параметра. Как вы помните, JavaScript - это не типизированный язык, поэтому параметры могут быть любых типов.

Тело функции заключено в фигурные скобки. Обратите внимание на то, что после инструкции document.write(Msg + ': ' + Num) нет точки с запятой. Это допустимо для последней инструкции в блоке (в нашем случае - в функции). Однако это плохая привычка - лучше ставить точку с запятой после всех инструкций.

В этом примере функция не возвращает результат. То есть в терминологии Паскаля это была бы процедура. Однако в С/С++, JavaScript и других подобных языках - это просто функция, которая не возвращает результат.

Ниже пример функции, которая возвращает результат:

function CalcSum(x, y)
{
  return x + y;
}

Для возвращения результата функцией используется ключевое слово return. После этого слова находится результат - какое-либо допустимое выражение JavaScript. Это выражение можно заключить в круглые скобки, но это не обязательно.

ПРИМЕЧАНИЕ
На самом деле любая функция возвращает результат. Просто если вы НЕ используете слово return, то функция вернёт значение undefined.

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

Вызов функций в JavaScript

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

Чтобы вызвать функцию, надо просто написать её имя, а в круглых скобках перечислить параметры. Пример вызова функций, которые мы определили выше:

MsgToScreen('Номер сообщения', 13);

alert(CalcSum(100, 50));

Как видите, функция, которая возвращает результат, может передаваться как параметр в другую функцию (в нашем случае мы результат работы функции CalcSum() передаём во встроенную функцию alert()). Последний пример отобразит на экране окно с числом 150:

Вызов функции в JavaScript

ВАЖНО!
JavaScript не проверяет соответствие типов параметров. Поэтому будьте внимательны. Количество параметров также не проверяется. Если вы передадите параметров больше, чем надо, то лишние аргументы просто не будут использованы. Если передадите меньше, чем надо, то отсутствующим аргументам будет присвоено значение undefined.

Вложенные функции в JavaScript

При необходимости вы можете внутри функции определить другие функции. Такие функции называются вложенными. Пример:

function Calc(x, y, op)
{ 
  function CalcSum(x, y)
  {
    return x + y;
  } 
  function CalcMul(x, y)
  {
    return x * y;
  }
  
  switch(op) 
  {
    case '+' :
      return CalcSum(x, y);
      
    case '*' :
      return CalcMul(x, y);
      
    default :
      return("Неизвестная операция");
  }
}

alert(Calc(100, 50, '-'));

В этом примере функции CalcSum и CalcMul являются вложенными в функцию Calc. Эти функции видны только в функции Calc и не могут быть использованы в другом месте сценария или в других внешних функциях. Также функции, определённые с помощью ключевого слова function, могут быть вложены только в другие функции, и не могут быть вложены в другие блоки кода (например, в циклы).

Кстати, если вы изучали предыдущие мои статьи, то вы догадались, что будет выведено на экран в этом примере. Если нет, что почитайте вот эту статью.

Функциональные литералы в JavaScript

В JavaScript можно определять функциональные литералы. В отличие от обычного объявления функции, которое мы рассмотрели выше, при создании функционального литерала не требуется указывать имя функции. Пример:

function MyFunc(x) {return x}
var mf = function(x) {return x}

alert(MyFunc(100));
alert(mf(100));

Здесь сначала мы создали обычную функцию. А затем - функциональную переменную (функциональный литерал).

То есть во втором случае у функции нет имени, но есть переменная, связанная с этой функцией.

Ещё пример:

var MF = [];

MF[0] = function(x) {return x}
MF[1] = function(x) {return x * x}
MF[2] = function(x) {return x * x * x}

for (i = 0; i < 3; i++) 
  document.write(MF[i](i) + ' ');

Здесь мы создали массив функций, а потом перебрали этот массив в цикле и поочерёдно вызвали все эти функции.

ВАЖНО!
Не забывайте, что язык JavaScript чувствителен к регистру, поэтому при именовании функций и последующем их вызове имейте это ввиду - функции (переменные) mf и MF - это разные функции.

Зачем вообще нужен такой способ?

Ну, например, когда функция используется только один раз и нет необходимости придумывать ей имя. Или как в показанном выше примере есть несколько похожих функций, которые удобно сохранить в массив и использовать ту или иную функцию в зависимости от значения какого-либо параметра.

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

//Пример функции, которая возвращает функцию
function test()
{
  var z = function() {return 500};
  return z;
}

var y = test();

document.write(y());

Здесь переменная у - это функция. Поэтому этот пример выведет на экран число 500, то есть результат выполнения функции z, которая была возвращена в результате выполнения функции test(). А если бы мы забыли про круглые скобки, и сделали так:

document.write(y);

То на экран уже был бы выведен НЕ результат работы функции, а значение переменной y, то есть:

function() {return 500}

потому что без круглых скобок это не функция, а функциональный литерал (функциональная переменная).

Эта статья - лишь капля в море знаний о JavaScript. Если хотите испить эту чашу до дна, то изучить этот язык, а также jQuery и Ajax можно здесь:

>>> JavaScript, jQuery и Ajax с нуля до гуру >>>


Программирование на JavaScript с Нуля до Гуру 2.0 Программирование на JavaScript

Видеокурс о программировании на JavaScript. Содержит 8 больших разделов от основ до работы с сетевыми запросами. В комплекте 5 подарков - мини-курсов по темам, связанным с сайтостроением. 72 урока продолжительностью более 13 часов. Упражнения и примеры исходных кодов. Поддержка от автора. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика