Извиняюсь за вопрос, но думаю, что многие по началу так же тупят как и я

Начал изучать ActionScript 3, обратился к первоисточнику к документации от Adobe.
Скачал их "Программирование на ADOBE ® ACTIONSCRIPT® 3.0", но пока очень туго идёт

Вот например фрагмент со страницы 98 ...
Цитата:
Например, в следующем программном коде создаются две функции: foo(), которая возвращает вложенную
функцию с именем rectArea(), рассчитывающую площадь прямоугольника, и функцию bar(), вызывающую
foo() и сохраняющую возвращаемое закрытие функции в переменной с именем myProduct. Несмотря на то,
что функция bar() определяет свою собственную локальную переменную x (со значением 2), если вызывается
закрытие функции myProduct(), она сохраняет переменную x (со значением 40), определенную в функции
foo(). Функция bar(), таким образом, возвращает значение 160 вместо 8.
 Код AS3:
function foo():Function
{
var x:int = 40;
function rectArea(y:int):int // function closure defined
{
return x * y
}
return rectArea;
}
function bar():void
{
var x:int = 2;
var y:int = 4;
var myProduct:Function = foo();
trace(myProduct(4)); // function closure called
}
bar(); // 160
|
2 дня читаю но понять не могу и они ни словом
о том зачем и почему "function foo():Function" функции "foo" присваивают тип "Function" хотя
судя по листингу "var myProduct:Function = foo();" это прямо связано с типом переменной
в функции "bar" .
Кто нибуть может понятно объяснить этот фрагмент руководства от ADOBE ?