2017-01-03 155 views
-1

我不明白的功能fromToFn(), 在我的例子中沒有與該名稱的功能,我不明白的功能

我不明白我的例子

例子:

var fromTo = function fromTo(i,limit){ 
 
     return function(){ 
 
      var next = i; 
 
      if(i<limit){ 
 
       i += 1; 
 
       return next; 
 
      } 
 
      return undefined; 
 
     } 
 
    } 
 
var collect = function collect(fromToFn,array){ 
 
     return function(){ 
 
      var value = fromToFn(); 
 
      if (value !== undefined){ 
 
       array.push(value); 
 
      } 
 
      return value; 
 
     } 
 
    } 
 
    var array = []; 
 
    var col = collect(fromTo(0,2),array); 
 
    
 
    col(); //returns 0 
 
    col(); //returns 1 
 
    col(); //returns undefined 
 
    console.log(array); //returns [0,1]

+0

@ T.J.Crowder ok對不起 – hubman

回答

0

當你做

var col = collect(fromTo(0,2),array); 

你打電話給collect函數,你傳遞的第一個參數是fromTo(0,2)

fromTo函數在調用時會返回一個函數。所以fromToFn,在調用collect,是一個函數,也可以被稱爲:

var value = fromToFn(); 

fromTocollect手柄功能,他們是所謂的"higher-order" functions。這在JavaScript中是可行的,因爲在JavaScript中,函數是一級值,可以將它們分配給其他類型的值(參見First-Class functions)。

在這種特定的情況下,通過fromTo返回函數的一點是,它可以使用fromTo範圍的變量,它被稱爲closure

1

我不明白的功能fromToFn(),在我的例子中沒有與該名稱

這是真的沒有的功能,但它並不重要。函數是JavaScript中的第一類對象,對它們的引用可以在變量,屬性和參數中傳遞。

fromToFncollect函數中的參數名:

var collect = function collect(fromToFn,array){ 
// ----------------------------^ 

因此,如果我們傳遞一個函數爲collect,我們可以在collect通過該參數使用它。

代碼確實傳遞函數爲collect,在這裏:

var col = collect(fromTo(0,2),array); 

...因爲fromTo(0, 2)回報的功能,然後將其傳遞到collect。要非常清楚,因爲有一些事情正在進行,傳遞到collect的功能是而不是fromTo,它的功能fromTo返回。該行可以寫成:

var functionToPassToCollect = fromTo(0,2); 
var col = collect(functionToPassToCollect,array); 

這裏有一個簡單的例子使用參數來調用傳遞的函數證明:

function example(f) { 
 
    f(); 
 
} 
 
function callMe() { 
 
    console.log("callMe was called"); 
 
} 
 

 
example(callMe);

+0

okey我對不起,如何刪除這個問題? – hubman

+0

@ rn3w:你不需要,這是一個完全合理的問題。但是,如果你想要,你需要標記它並請主持人爲你做。 –

0

fromToFn是發送給函數的'收集「功能作爲參數:

function collect(fromToFn,array); 

和你發送fromTo函數:

collect(fromTo(0,2),array)