почитайте про переменные, как они устроены.
вот смотрите:
var a = 1;//есть переменная а
console.log(a); //если вывести переменную в консоль, то там высветиться 1, думаю понятно почему.. переменная равна единице
var str = 'stroka';//переменная типа string, т.е. строка
console.log(str);//выведем в консоль, получим результат stroka
теперь возьмем массив:
var ar = [4, 7, 5];
console.log(ar[0]); //выведем 0-ой элемент массива, получим 4
console.log(ar); //выведем весь массив
возьмем функцию:
function fn() {
alert('fn!');
}
fn(); //вызовем ее. в алерт выпадет fn!
console.log(fn);//теперь выведем fn в консоль, ведь fn - это тоже переменная, как и a, str, ar. только она хранит не число, строку, массив а хранит она функцию
теперь возьмем еще одну функцию
function mfn(a){
console.log(a); //а равняется четырем, т.к. передали мы именно 4
return 5 + a; //функция может возвращать значения a + 5 (a равняется 4), то результат будет 9
}
var res = mfn(4);//в функцию мы передаем параметр 4. результат выполнения функции равен 9
console.log(res);
теперь возьмем еще одну функцию:
function ffn(){
//внутри функции ffn мы создаем еще одну функцию, назовем ее myfn
function myfn(){
alert(1);
}
console.log(myfn); //попробуем вывести ...
return myfn;//а теперь отдадим результат. т.е. мы отдали переменную myfn, в которой хранится функция
}
var res = ffn(); //вызовем функцию ffn и результатом выполнения этой функции будет другая функция, а именно myfn. сохраним результат в переменную res
console.log(res); //выведем значение res
res(); //т.к. res это функция, то можем ее вызвать ..