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

Very Basic JavaScript Callback/Closure Structure

本文关键字:闭包 结构 回调 JavaScript 非常      更新时间:2023-09-26

我有这个代码:

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

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

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

  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应该是它的论点之一。