HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Ключевое слово function может использоваться для определения функции внутри выражения.
function
Вы можете также определять функции используя конструктор Function и объявление функции.
Function
объявление функции
var myFunction = function [name]([param1[, param2[, ..., paramN]]]) { statements };
С версии ES2015 можно также использовать стрелочные функции.
name
Имя функции. Может быть опущено, в таком случае функция является анонимной. Имя функции является локальным для её тела.
paramN
Имя аргумента, передаваемого в функцию.
statements
Инструкции, составляющие тело функции.
Функциональное выражение и объявление функции очень похожи и имеют почти одинаковый синтаксис. Главным отличием между ними является имя функции, которое в случае функциональных выражений может быть опущено для создания анонимных функций. Функциональное выражение может быть использовано для создания самовызывающейся функции IIFE (Immediately Invoked Function Expression), которая исполняется сразу же после того, как она была определена. Более подробная информация изложена в разделе о функциях.
Функциональные выражения в JavaScript не поднимаются (hoisting), в отличие от объявленных функций. Вы не можете использовать функциональные выражения прежде, чем вы их определили.
объявленных функций
console.log(notHoisted); // undefined //Хотя объявленная переменная и поднимается, определение переменной происходит позже notHoisted(); // TypeError: notHoisted is not a function var notHoisted = function () { console.log("bar"); };
Если вы хотите сослаться на текущую функцию внутри тела этой функции, вам необходимо создать именованное функциональное выражение. Данное имя будет локальным только для тела функции (её области видимости). Кроме того, это позволяет избежать использования нестандартного свойства arguments.callee.
arguments.callee
var math = { factit: function factorial(n) { console.log(n); if (n <= 1) { return 1; } return n * factorial(n - 1); }, }; math.factit(3); //3;2;1;
Переменная, которой присвоено функциональное выражение, будет иметь свойство name, содержащее имя функции. Оно не изменится при переприсваивании другой переменной. Для анонимной функции, значением свойства name будет имя переменной (неявное имя). Если же имя задано, то будет использовано имя функции (явное имя). Это же касается стрелочных функций (в их случае там будет записано имя переменной, т.к. они всегда анонимные).
var foo = function () {}; foo.name; // "foo" var foo2 = foo; foo2.name; // "foo" var bar = function baz() {}; bar.name; // "baz" console.log(foo === foo2); // true console.log(typeof baz); // undefined console.log(bar === baz); // false (errors because baz == undefined)
Следующий пример демонстрирует создание безымянной (анонимной) функции и присвоение её переменной x. Функция возвращает квадрат переданного значения:
x
var x = function (y) { return y * y; };
Преимущественно анонимные функции используются как колбэк-функции.
button.addEventListener("click", function (event) { console.log("button is clicked!"); });
Enable JavaScript to view this browser compatibility table.
Functions and function scope
function statement
function* statement
function* expression
GeneratorFunction