【问题标题】:Very Basic JavaScript Callback/Closure Structure非常基本的 JavaScript 回调/闭包结构
【发布时间】:2014-12-06 11:43:28
【问题描述】:

我有这个代码:

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

这种情况的首选解决方案是什么?谢谢

【问题讨论】:

  • foocallback 是从哪里来的?

标签: javascript callback closures


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2022-01-04
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多