Найти тему
Сергей Б.

Возврат функций

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

function func1( ) {
var a = 10;
return function( ) {
return a + 100;
}
}
var f = func1( );
console.log(f( )) // выведется 110

Здесь объявлена функция func1, внутри которой объявлена переменная a. Соответственно, переменная a является частью области видимости функции func1.

Далее, func1 возвращает другую функцию, задача которой - сложить значение переменной a со значением 100.

За пределами func1 создается переменная f, в которую присваивается результат вызова функции func1.

Напомню, что результатом функции func1 является другая функция, задача которой - сложить значение переменной a со значением 100.

После объявления переменной f и присвоения ей результата вызова func1, происходит вызов функции f и вывод результат на экран.

Посмотрите внимательно на код и на результат.

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

В данном случае, внутри func1 была объявлена переменная a. func1 возвращает анонимную функцию, которая в своем коде использует переменную a, доступную ей через механизм замыканий.

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