2014-07-20 2 views
3

Мой вопрос может быть глупым, поэтому извиниться заранее. Мои инструкции заключались в создании функции, которая повторялась в очереди функций. Ответ находится внизу ... ниже массива puzzlers.Я не понимаю мой цикл?

Может кто-нибудь объяснить, почему команда в for-loop равна input = queue.shift() (input);. Я понимаю, что я должен был использовать метод shift для опорожнения очереди. Это упражнение меня сбило с толку, но создало input = queue.shift() (input); все еще странно для меня. любые фундаментальные объяснения были бы весьма признательны. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать ..... спасибо вам заранее.

var puzzlers = [ 
    function (a) { return 8*a - 10; }, 
    function (a) { return (a-3) * (a-3) * (a-3); }, 
    function (a) { return a * a + 4; }, 
    function (a) { return a % 5; } 
]; 

var applyAndEmpty = function(input, queue) { 
    var length = queue.length; 
    for(var i = 0; i<length; i++){ 
     input = queue.shift()(input); 
    } 
    return input; 
}; 
alert(applyAndEmpty(2, puzzlers)); 
+5

Пожалуйста, верните свой вопрос. –

+0

Выше комментарий по-прежнему применяется. – faintsignal

ответ

5

queue является массивом, поэтому queue.shift() берета первого элемента из массива (извлекая его) и возвращает его.

Теперь, поскольку queue выполняет функции, вы сообщаете, какая функция была в начале queue для запуска с параметром input.

Для более конкретного примера предположим, что первым элементом в queue была функция, называемая function1. Вы можете придумать queue.shift() как замененный на function1 после его оценки - так queue.shift()(input); будет function1(input);

+0

'.shift()' также удаляет этот элемент из массива. –

+0

Спасибо, джентльмен ...... теперь это имеет смысл. – user3843070

Смежные вопросы