Вопрос по замыканию
Приветствую. Извиняюсь, если тема уже была (что наверняка, только я найти/понять не смог). Гугл мне тоже бегло не помог, обычно я всегда все находил сам. Пишу впервые, так как сам понимаю занятость людей. Вопрос такой: как засунуть в глобальную переменную локальную функцию, если в родительской функции есть НЕСКОЛЬКО дочерних равноправных функций?
Простой пример (сорян, вашим автокодом так и не воткнул, как пользоваться). Вот пример. 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, время: 21:52. |