04.05.2012, 10:08
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Не проще ли просто использовать некоторую внешнюю переменную как флаг, хранящий одно из пары значений (например, true/false или 0/1), если одно значение флага - исполняй одну функцию, второе - вторую, а при кликах просто изменять значение этого флага.
|
|
04.05.2012, 10:20
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Например, так
<script>
var a = 0;
function toggle() {
if (a == 0)
{f1(); a = 1}
else
{f2(); a = 0}
}
</script>
|
|
04.05.2012, 10:30
|
sinistral
|
|
Регистрация: 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>
|
в вышеупомянутой функции сделано без замыкания, и с возможностью последовательного (через клик) исполнения хоть тысячи функций.
|
|
04.05.2012, 11:55
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от melky
|
в вышеупомянутой функции сделано без замыкания, и с возможностью последовательного (через клик) исполнения хоть тысячи функций.
|
Я и не критиковал ваш вариант решения, но в частном случае с двумя чередующимися функциями наверное проще сделать именно так.
|
|
04.05.2012, 12:08
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от bes
|
Я и не критиковал ваш вариант решения, но в частном случае с двумя чередующимися функциями наверное проще сделать именно так.
|
замыкания потребляют память. разница в [[scope]] (в случае замыкания) и в объекте (мой случай) небольшая, но есть.сейчас не то время, когда нужно экономить память, но всё-таки лучше придерживаться сильных сторон JavaScript, и не использовать его "источники огромной силы" в каждом скрипте (javascript :Сильные стороны, by Дуглас Крокфорд)
|
|
04.05.2012, 12:26
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от melky
|
замыкания потребляют память
|
Может я чего-то и не понимаю, но причём здесь вообще замыкания, здесь переменная создаётся не как локальная переменная функции toggle(), а как глобальная переменная, то есть эта переменная была, существует и будет существовать в одном своём экземпляре.
|
|
04.05.2012, 13:01
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от bes
|
Может я чего-то и не понимаю, но причём здесь вообще замыкания, здесь переменная создаётся не как локальная переменная функции toggle(), а как глобальная переменная, то есть эта переменная была, существует и будет существовать в одном своём экземпляре.
|
а, да. извиняюсь, просмотрел для одного-двух обработчиков так можно сделать, согласен. а что если таких тогглеров около 20 ?
|
|
04.05.2012, 13:45
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от melky
|
для одного-двух обработчиков так можно сделать, согласен. а что если таких тогглеров около 20
|
Тогда подойдёт оператор switch, а переменную-флаг увеличивать каждый раз на единицу (кроме самого последнего значения, которое надо обнулить).
|
|
04.05.2012, 14:34
|
|
Профессор
|
|
Регистрация: 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.
|
|
05.05.2012, 23:14
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от melky
|
в коде в переменной ie будет true в ie<9 (если не ошибаюсь) - а сама она написана для использования ie api. в ie > 8 она будет false, а в них уже поддеживаются методы w3c.
всё схвачено
|
В ie <= 9, а по поводу 10-ой версии не совсем понятно. Но не то чтобы это так важно. Я просто недавно узнал об этом изменении, а потом на твой код наткнулся...
А вообще можно так
|
|
|
|