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

时间:2014-12-06 11:43:29

标签: 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);
        console.log('f1' + barvar);
    });
}

foofunction1();

匿名内联函数可以访问foovar并记录foo,bar。现在我想将大量代码移动到它自己的函数中以保持功能可读,同时保持对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);
}

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

1 个答案:

答案 0 :(得分: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设为全局变量。

  3. 我认为解决方案1更好,因为如果barcallback需要访问foovar,则foovar应该是其参数之一。