Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.05.2012, 10:08
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Не проще ли просто использовать некоторую внешнюю переменную как флаг, хранящий одно из пары значений (например, true/false или 0/1), если одно значение флага - исполняй одну функцию, второе - вторую, а при кликах просто изменять значение этого флага.
Ответить с цитированием
  #12 (permalink)  
Старый 04.05.2012, 10:20
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Например, так
<script>
var a = 0;
function toggle() {
if (a == 0) 
  {f1(); a = 1} 
else 
  {f2(); a = 0}
}
</script>
Ответить с цитированием
  #13 (permalink)  
Старый 04.05.2012, 10:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от bes Посмотреть сообщение
Не проще ли просто использовать некоторую внешнюю переменную как флаг, хранящий одно из пары значений (например, true/false или 0/1), если одно значение флага - исполняй одну функцию, второе - вторую, а при кликах просто изменять значение этого флага.
Сообщение от bes Посмотреть сообщение
Например, так
<script>
var a = 0;
function toggle() {
if (a == 0) 
  {f1(); a = 1} 
else 
  {f2(); a = 0}
}
</script>
в вышеупомянутой функции сделано без замыкания, и с возможностью последовательного (через клик) исполнения хоть тысячи функций.
Ответить с цитированием
  #14 (permalink)  
Старый 04.05.2012, 11:55
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от melky
в вышеупомянутой функции сделано без замыкания, и с возможностью последовательного (через клик) исполнения хоть тысячи функций.
Я и не критиковал ваш вариант решения, но в частном случае с двумя чередующимися функциями наверное проще сделать именно так.
Ответить с цитированием
  #15 (permalink)  
Старый 04.05.2012, 12:08
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от bes Посмотреть сообщение
Я и не критиковал ваш вариант решения, но в частном случае с двумя чередующимися функциями наверное проще сделать именно так.
замыкания потребляют память. разница в [[scope]] (в случае замыкания) и в объекте (мой случай) небольшая, но есть.сейчас не то время, когда нужно экономить память, но всё-таки лучше придерживаться сильных сторон JavaScript, и не использовать его "источники огромной силы" в каждом скрипте (javascript:Сильные стороны, by Дуглас Крокфорд)
Ответить с цитированием
  #16 (permalink)  
Старый 04.05.2012, 12:26
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от melky
замыкания потребляют память
Может я чего-то и не понимаю, но причём здесь вообще замыкания, здесь переменная создаётся не как локальная переменная функции toggle(), а как глобальная переменная, то есть эта переменная была, существует и будет существовать в одном своём экземпляре.
Ответить с цитированием
  #17 (permalink)  
Старый 04.05.2012, 13:01
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от bes Посмотреть сообщение
Может я чего-то и не понимаю, но причём здесь вообще замыкания, здесь переменная создаётся не как локальная переменная функции toggle(), а как глобальная переменная, то есть эта переменная была, существует и будет существовать в одном своём экземпляре.
а, да. извиняюсь, просмотрел для одного-двух обработчиков так можно сделать, согласен. а что если таких тогглеров около 20 ?
Ответить с цитированием
  #18 (permalink)  
Старый 04.05.2012, 13:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от melky
для одного-двух обработчиков так можно сделать, согласен. а что если таких тогглеров около 20
Тогда подойдёт оператор switch, а переменную-флаг увеличивать каждый раз на единицу (кроме самого последнего значения, которое надо обнулить).
Ответить с цитированием
  #19 (permalink)  
Старый 04.05.2012, 14:34
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

//например, для 3 функций
var a = 0;
function toggle3() {
  switch (a) {
    case 0: {f1(); break}
    case 1: {f2(); break}
    case 2: {f3(); break}
  }
  if (a == 2) a = 0; else a = a + 1;
}


//или так
var a = 0;
function toggle3() {
  switch (a) {
    case 0: {f1(); break}
    case 1: {f2(); break}
    case 2: {f3(); break}
    default: {f1(); a = 0}
  }
  a = a + 1;
}

Последний раз редактировалось bes, 04.05.2012 в 14:38.
Ответить с цитированием
  #20 (permalink)  
Старый 05.05.2012, 23:14
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от melky
в коде в переменной ie будет true в ie<9 (если не ошибаюсь) - а сама она написана для использования ie api. в ie > 8 она будет false, а в них уже поддеживаются методы w3c.

всё схвачено
В ie <= 9, а по поводу 10-ой версии не совсем понятно. Но не то чтобы это так важно. Я просто недавно узнал об этом изменении, а потом на твой код наткнулся...

А вообще можно так
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли аналог nl2br в javascript ? saturn Элементы интерфейса 7 13.11.2011 14:02
Есть ли в JavaScript аналог функции exec() из php? lorddarkside Общие вопросы Javascript 3 22.12.2010 12:37
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Есть ли на JavaScript аналог PHP функции include?) FirstFrost Общие вопросы Javascript 3 13.07.2010 10:13