Функции


function showMessage() {
  alert('Hello World!');
}

showMessage();

Объявление

var randomNumber = Math.floor(Math.random() * 6) + 1;

На примере

Возврат значения

function getMessage() {
  return 'Hello World!';
}

var message = getMessage();

alert( message );

Директива return может также использоваться без значения, чтобы прекратить выполнение и выйти из функции.

Возврат значения


function noMessage() {
  return;
  alert('Hello World!');
}

noMessage();

Директива return прекращает выполнение и выходит из функции.


function getMessage() {
  return 'Hello', 'Beetroot', 'Students', 5; // вернет 5
}

Вы не можете вернуть сразу несколько значений

Локальные переменные



function showMessage() {
  var message = 'Hello World!'; // локальная переменная

  alert(message);
}

showMessage(); // 'Hello World!'

alert(message); // будет ошибка, т.к. переменная видна только внутри

Область видимости

Внешние переменные



var userName = 'World';

function showMessage() {
  var message = 'Hello ' + userName + '!';
  alert(message);
}

showMessage(); // 'Hello World!'

Параметры

Параметры копируются в локальные переменные функции.

function showMessage(message, name) {
  // параметры message, name
  alert(message + ' ' + name + '!');
}

showMessage('Hello', 'World');

Перепишем функцию getRandom() с параметрами 

function getRandom(){
    var randomNumber = Math.floor(Math.random() * 6) + 1;
    return randomNumber;
}

Аргументы по умолчанию


function showMessage(message, name) {
  // параметры message, name
  if (name === undefined) {
    name = 'World';
  }
  // name = name || 'World';

  alert(message + ' ' + name + '!');
}

showMessage('Hello', );​

Возврат значения

function calculateArea( width, length ) {
  return width * length;
}

calculateArea( 5, 4 ); // 20
calculateArea( 30, 4 ); // 120

var test = calculateArea(2, 2);
alert(test); // 4

Директива return может также использоваться без значения, чтобы прекратить выполнение и выйти из функции.

  • В JavaScript функция является значением, таким же как строка или число.
  • Функцию можно скопировать в другую переменную.
  • Обычные значения, такие как числа или строки, представляют собой данные. А функцию можно воспринимать как действие.
function sayHey() {
  alert( "Привет" );
}

alert( sayHey ); // выведет код функции

Function Declaration
Function Expression



// Function Declaration
function sum(a, b) {
  return a + b;
}

// Function Expression
var sum = function(a, b) {
  return a + b;
}

Основное отличие между ними: функции, объявленные как Function Declaration, создаются интерпретатором до выполнения кода.



if (age >= 18) {
  function sayHi() {
    alert('OK!');
  }
} else {
  function sayHi() {
    alert('До 18 нельзя');
  }
}

sayHi();


function sayHi() {
  alert('OK');
}

function sayHi() {
  alert('До 18 нельзя');
}

var age = 20;

if (age >= 18) {
  /* объявление было обработано ранее */
  sayHi()
} else {
  /* объявление было обработано ранее */
  sayHi()
}

sayHi(); // "До 18 нельзя", сработает всегда вторая функция

Анонимные функции

function ask(question, yes, no) {
    if (confirm(question)) {
        yes();    
    } else {
        no();
    }
}

function showOk() {
  alert("Вы согласились.");
}

function showCancel() {
  alert("Вы отменили выполнение.");
}

ask("Вы согласны?", showOk, showCancel);
function ask(question, yes, no) {
    if (confirm(question)) {
        yes();    
    } else {
        no();
    }
}

ask(
    "Вы согласны?",
    function() {
        alert("Вы согласились.");
    },
    function() {
      alert("Вы отменили выполнение.");
    }
);

Функциональное выражение, которое не записывается в переменную, называют анонимной функцией.

Рекурсия

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

Частный случай подвызова – когда функция вызывает сама себя. Это называется рекурсией.

Степень pow(x, n) через рекурсию
pow(x, n) = x * pow(x, n - 1)

То есть, xn = x * xn-1

function pow(x, n) {
  if (n != 1) { // пока n != 1, сводить вычисление pow(x,n) к pow(x,n-1)
    return x * pow(x, n - 1);
  } else {
    return x;
  }
}

alert( pow(2, 3) ); // 8

Итого

  • Объявление функции имеет вид: 
function имя(параметры, через, запятую) {
  код функции
}
  • Передаваемые значения копируются в параметры функции и становятся локальными переменными.
  • Параметры функции копируются в её локальные переменные.
  • Можно объявить новые локальные переменые при помощи var.
  • Значение возвращается оператором return ....
  • Вызов return тут же прекращает функцию.
  • Если return; вызван без значения, или функция завершилась без return, то её результат равен undefined.

JavaScript - Функции

By Alexey Kalyuzhnyi