Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите разобратса (https://javascript.ru/forum/misc/4828-pomogite-razobratsa.html)

alex0071 23.08.2009 19:00

Помогите разобратса
 
Я только начал изучать этот язык.
Вот возникла проблемка
<script>
function makefunc(x) {
return x; 
}

var a = [makefunc(0), makefunc(1), makefunc(2)];

alert(a[0]( )); 
alert(a[1]( ));
alert(a[2]( )); 
</script>

Почему такая штука не работает?

Octane 23.08.2009 19:05

У вас массив заполнен результатами выполнения функции

Dmitry A. Soshnikov 23.08.2009 19:06

alex0071, а что, по Вашему, должен делать этот код? Если элементами массива "а" должны являться функции (что видно из a[0]( )), то почему функция "makefunc", наполняя массив "а", возвращает не функцию, а число?

Riim 23.08.2009 19:07

function makefunc(x) {
return function() {return x}; 
}

alex0071 23.08.2009 19:13

Цитата:

Сообщение от Octane
У вас массив заполнен результатами выполнения функции

Так вроде так и должно быть а потом результаты эти выводить
Цитата:

Сообщение от Dmitry A. Soshnikov
возвращает не функцию, а число?

Ну возвращает число и выводит его(такая идея)
Цитата:

Сообщение от Riim
function makefunc(x) {
return function() {return x};
}

Хмм замыкания. Не прошу расказать как они работают, прошу обьяснить почему без них не работает =)

Riim 23.08.2009 19:22

Цитата:

Сообщение от alex0071
Хмм замыкания. Не прошу расказать как они работают, прошу обьяснить почему без них не работает

Потому что в массиве число, и вы его запускаете как функцию.

alex0071 23.08.2009 19:37

Спасибки понял
так как у меня репа 0
Ставлю вам так всем жирные +++++

alex0071 23.08.2009 19:49

Нашёл решение
<script>
function makefunc(x) {
return x;
}

var a = [makefunc(0), makefunc(1), makefunc(2)];

alert(a[0]); // Выведет 0
alert(a[1]); // Выведет 1
alert(a[2]); // Выведет 2
</script>


Часовой пояс GMT +3, время: 21:32.