非常基本的JavaScript回调/闭包结构

非常基本的JavaScript回调/闭包结构,javascript,callback,closures,Javascript,Callback,Closures,我有以下代码: var barfunction = function(foocallback){ foocallback('bar'); } var foofunction1 = function(){ var foovar = 'foo'; barfunction(function(barvar){ /*huge amounts of code */ console.log('f1' + foovar); consol

我有以下代码:

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);
}

此场景的首选解决方案是什么?谢谢

我只能看到两种解决方案:

  • 在函数中添加另一个参数

    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);
    }
    
  • 在此上下文中使foovar成为全局变量


  • 我认为解决方案1更好,因为如果
    barcallback
    需要访问
    foovar
    ,那么
    foovar
    应该是它的参数之一。

    foocallback来自哪里?