Вопрос по замыканию
Приветствую. Извиняюсь, если тема уже была (что наверняка, только я найти/понять не смог). Гугл мне тоже бегло не помог, обычно я всегда все находил сам. Пишу впервые, так как сам понимаю занятость людей. Вопрос такой: как засунуть в глобальную переменную локальную функцию, если в родительской функции есть НЕСКОЛЬКО дочерних равноправных функций?
Простой пример (сорян, вашим автокодом так и не воткнул, как пользоваться). Вот пример.
function counter(){
a = 5;
function x(){
a++;
console.log(a);
}
function y(){
a --;
console.log(a);
}
}
counter()
Мне нужно трижды запустить функцию y(). Я знаю, как это сделать локально (вот так).
function counter(){
a = 5;
function x(){
a++;
console.log(a);
}
function y(){
a--;
console.log(a);
}
y();
y();
y();
}
counter()
Знаю, как вставить в переменную ЕДИНСТВЕННУЮ функцию из родительской функции. Вот так:
function counter(){
a = 5;
return function y(){
a--;
console.log(a);
}
}
var value = counter();
value();
value();
value();
Но этот трюк работает лишь, если функция одна единственная в родительской функции. А у меня в верхнем самом примере две функции (х и у) в родительской. Собственно, вопрос озвучил - нужна глобальная переменная, содержащая функцию y(). Подскажите, пожалуйста. Баньте меня, если я совсем налажал. Полтора месяца изучаю программирование самостоятельно. Простые вопросы быстро гуглятся, а вот более специфические - нет. Спасибо всем откликнувшимся. Сорян за длиннопост. Надеюсь, показал, что сам частично смог разобраться. |
Иса Мирзоев,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Иса Мирзоев,
ничего не понял, подожду специалистов. |
function counter(){
var a = 5;
function x(){
a++;
console.log(a);
}
function y(){
a --;
console.log(a);
}
return {x:x, y:y};
}
var value = counter();
value.y();
value.y();
value.y();
P.S.: а почему перестал работать запуск кода на сайте? Или это только у меня? |
Белый шум,
как временый выход добавить теги script и обернуть в <> , видимо с тегом [js run]проблема, используйте [html run]<script>... |
Все отлично))
Цитата:
|
Белый шум,
отпишись, работает ли в песочнице скрипт сейчас? |
Сделать то это можно так:
function counter(){
var a = 5;
x = function(){
a++;
console.log(a);
}
y = function(){
a--;
console.log(a);
}
}
counter();
y();
y();
x();
Но на самом деле так делать не надо.) Если вам нужны глобальные переменные - значит вы с гарантией делаете что-то не так. |
Цитата:
Благодарю Вас. Я как чувствовал, что есть более простое решение, чем элегантный код, предложенный форумчанином выше (больше спасибо Вам, Белый шум, понял с какими темами мне стоит еще поработать). В лс еще Вам напишу кое-что. Спасибо, закрываем тему. |
Цитата:
|
| Часовой пояс GMT +3, время: 07:50. |