2014-12-06 2 views
0

У меня есть этот код:очень простой JavaScript Обратный звонок/Закрытие Структура

var barfunction = function(foocallback){ 
    foocallback('bar'); 
} 

var foofunction1 = function(){ 
    var foovar = 'foo'; 

    barfunction(function(barvar){ 
     /*huge amounts of code */ 
     console.log('f1' + foovar); 
     console.log('f1' + barvar); 
    }); 
} 

foofunction1(); 

анонимной инлайн функции имеют доступ к foovar и журналы Foo, Bar. Теперь я хочу переместить огромное количество кода в свою собственную функцию, чтобы сохранить читаемость foofunction, сохраняя при этом ссылку на foovar.

var barcallback = function(barvar){ 
    /* huge amounts of code */ 
    /* need foovar here */ 
    console.log('f2' + barvar); 
} 

var barfunction = function(foocallback){ 
    foocallback('bar'); 
} 

var foofunction2 = function(){ 
    var foovar = 'foo'; 
    barfunction(barcallback); 
} 

Какое предпочтительное решение для этого сценария? Спасибо

+0

Откуда взялся foocallback? –

ответ

0

Я вижу только два решения:

  1. Добавить еще один параметр в функции

    var barcallback = function(barvar, foovar){ 
        console.log('f1' + foovar); 
        console.log('f2' + barvar); 
    } 
    
    var barfunction = function(foocallback, foovar){ 
        foocallback('bar', foovar); 
    } 
    
    var foofunction2 = function(){ 
        var foovar = 'foo'; 
        barfunction(barcallback, foovar); 
    } 
    
  2. Сделать foovar глобальной переменной в этом контексте.

Я думаю, что решение 1 лучше, потому что, если barcallback потребности доступа foovar, то foovar должен быть один из его аргументов.

Смежные вопросы