2014-12-06 41 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,酒吧。現在我想將大量代碼移入其自己的函數中,以保持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從哪裏來? – 2014-12-06 11:49:24

回答

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應該是它的一個參數。