Оголошення функції

Оголошення функції (функціональний оператор) визначає функцію з вказаними параметрами.

Ви також можете визначати функції за допомогою конструктора Function та функціонального виразу.

Синтаксис

function name([param[, param,[..., param]]]) {
   [statements]
}
name
Ім'я функції.
param
Ім'я аргументу, що передається у функцію. Максимальна кількість аргументів відрізняється у різних рушіях.
statements
Інструкції, які складають тіло функції.

Опис

Функція, утворена через оголошення функції, є об'єктом Function, і має усі властивості, методи та поведінку об'єктів Function. Більш детальну інформацію щодо функцій дивіться у статті Function.

Функція також може бути створена через за допомогою виразу (дивіться функціональний вираз).

За замовчуванням функції повертають undefined. Щоб повернути будь-яке інше значення, функція повинна мати оператор return, який вказує значення, що буде повернене.

Умовне створення функцій

Функції можуть оголошуватися за певної умови, тобто, оголошення функції може бути вкладене у if, однак, результат різниться між реалізаціями, тому цей шаблон не варто використовувати у виробничому коді. Для умовного створення функції використовуйте, натомість, функціональний вираз.

var hoisted = "foo" in this;
console.log(`Ім'я 'foo'${hoisted ? "" : " не"} піднімається. typeof foo дорівнює ${typeof foo}`);
if (false) {
  function foo(){ return 1; }
}

// У Chrome: 
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
// 
// У Firefox:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Edge:
// Ім'я 'foo' не піднімається. typeof foo дорівнює undefined
// 
// У Safari:
// Ім'я 'foo' піднімається. typeof foo дорівнює function

Результат буде такий самий для умови, яка дорівнює true

var hoisted = "foo" in this;
console.log(`Ім'я 'foo' ${hoisted ? "" : " не"} піднімається. typeof foo дорівнює ${typeof foo}`);
if (true) {
  function foo(){ return 1; }
}

// У Chrome: 
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
// 
// У Firefox:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Edge:
// Ім'я 'foo' не піднімається. typeof foo дорівнює undefined
// 
// У Safari:
// Ім'я 'foo' піднімається. typeof foo дорівнює function

Підняття оголошення функції

Оголошення функцій у JavaScript піднімаються наверх замикаючої функції або глобальної області видимості. Ви можете використовувати функцію до того, як оголосили її:

hoisted(); // виводить "foo"

function hoisted() {
  console.log('foo');
}

Зауважте, що функціональні вирази не піднімаються:

notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {
   console.log('bar');
};

Приклади

Використання function

Наступний код оголошує функцію, яка повертає загальну суму продажів, отримуючи кількість одиниць продуктів a, b та c.

function calc_sales(units_a, units_b, units_c) {
   return units_a * 79 + units_b * 129 + units_c * 699;
}

Специфікації

Специфікація Статус Коментар
ECMAScript Latest Draft (ECMA-262)
The definition of 'Function definitions' in that specification.
Draft
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Function definitions' in that specification.
Standard
ECMAScript 5.1 (ECMA-262)
The definition of 'Function definition' in that specification.
Standard
ECMAScript 3rd Edition (ECMA-262)
The definition of 'Function definition' in that specification.
Standard
ECMAScript 1st Edition (ECMA-262)
The definition of 'Function definition' in that specification.
Standard Початкове визначення. Реалізоване у JavaScript 1.0.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
functionChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Trailing comma in parametersChrome Full support 58Edge Full support 14Firefox Full support 52IE No support NoOpera Full support 45Safari ? WebView Android Full support 58Chrome Android Full support 58Firefox Android Full support 52Opera Android Full support 43Safari iOS ? Samsung Internet Android Full support 7.0nodejs Full support 8.0.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown

Див. також