Показать сообщение отдельно
  #5 (permalink)  
Старый 11.01.2012, 16:44
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

melky,
Да не, причём тут замыкания. Ведь функцией B будет пользоваться только A, правильно? Ну тогда так:

function(a1, a2){
var b1, b2, b3;

//код A, он меняет переменные b1, b2, b3. Использует a1, a2

//код B, он использует переменные b1, b2, b3
}

Ну а если не только функция A будет пользоваться B, то так:
function(a1, a2, flag){
var b1, b2, b3;

if(!flag) { // false или опущен флаг, по умолчанию используем функцию A
//код A, он меняет переменные b1, b2, b3. Использует a1, a2
}
//код B, он использует переменные b1, b2, b3
}


Если против подхода с !flag, как вы когда то писали про isNaN, то можно так:
function(a1, a2, flag){
var b1, b2, b3;
A:{
if(flag) break A;
//код A, он меняет переменные b1, b2, b3. Использует a1, a2
}
//B:{ условно блок B
//код B, он использует переменные b1, b2, b3
//{
}


UPD:
Да, чтот поспешил с 2мя последними вариантами, но в этом потоке, что бы можно было передавать аргументы B. Сейчас исправлюсь.
UPD2:
function(flag){
var b1, b2, b3, a1, a2, i = 0, args, flag;
typeof arguments[0] == 'boolean'  && ++i && (flag = arguments[0]);
args = Array.prototype.slice.call(arguments, i);
if(flag) {
//выставляем значения для функции B
b1 = args[0], b1 = args[1], b2 = args[2];
}else{
a1 = args[0], a2 = args[1];
//код A, он меняет переменные b1, b2, b3. Использует a1, a2
}
//код B, он использует переменные b1, b2, b3
}


Ну это замудренно
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.

Последний раз редактировалось Nekromancer, 11.01.2012 в 16:58.
Ответить с цитированием