2017-01-03 3 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 ок я извиняюсь – hubman

ответ

0

Когда вы

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

Вы вызываете функцию collect, и первый аргумент, который вы передаете, - fromTo(0,2).

fromTo функция, когда вызван, возвращает функцию. Так fromToFn, в вызове collect, является функцией и может быть вызвана также:

var value = fromToFn(); 

fromTo и collect функции ручки, они называются "higher-order" functions. Это возможно в JavaScript, поскольку в JavaScript функции являются первоклассными значениями, их можно назначить таким переменным, как другие типы значений (см. First-Class functions).

В этом конкретном случае точка функции, возвращаемая fromTo, состоит в том, что она может использовать переменные области fromTo, она называется closure.

1

Я не понимаю функцию fromToFn(), в моем примере нет никакой функции с этим именем

Это правда, но это не имеет значения. Функции являются первоклассными объектами в JavaScript, ссылки на них могут передаваться в переменных, свойствах и параметрах.

fromToFn это имя параметра в функции collect:

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

ОКЕЙ я извиняюсь, как удалить этот вопрос? – hubman

+0

@ rn3w: Вам это не нужно, это вполне разумный вопрос. Но если вы захотите, вам нужно будет пометить его и попросить модератора сделать это за вас. –

0

fromToFn это функция, которая направляется в ' собирать 'в качестве параметра:

function collect(fromToFn,array); 

и вы посылаете функцию FromTo:

collect(fromTo(0,2),array)