2013-05-30 3 views
2

У меня возникли проблемы с попыткой понять приведенный ниже код. Я исхожу из фона Java. Как мне это прочитать? Есть ли хорошие Java> Javascript книги/учебные пособия, над которыми я должен смотреть?Javascript Понимание функций

function sum(numbers) { 
    var total = 0; 

    forEach(numbers, function (number) { 
     total += number; 
    }); 

    return total; 
} 
show(sum([1, 10, 100])); 

Выдержки из http://eloquentjavascript.net/chapter6.html

Я смотрю на Foreach (числа, функция (номер) ... код. Где анонимная функция получить 'номер' от?

ответ

2

It получает номер от чисел. Что говорит пропеллер, так это то, что для каждого элемента в числах вызов анонимной функции с этим элементом. Тогда этот элемент называется номером, но его можно назвать чем угодно.

5

Посмотрите на источник forEach:

function forEach(array, action) { 
    for (var i = 0; i < array.length; i++) 
    action(array[i]); 
} 

forEach принимает два аргумента: массив и обратного вызова (т.е. функция). Вы можете видеть, что он вызывает обратный вызов в цикле, передавая ему «текущий» элемент массива в качестве аргумента каждый раз. Вот что входит в формальный параметр обратного вызова number.

Чтобы поставить этот другой путь - вы можете легко это понять:

function hello(what) { 
    alert("Hello " + what); 
} 

hello("world"); 

Если вы используете hello в качестве обратного вызова вы прибудете на код очень похож на тот, который вы показать:

function say(callback, what) { 
    callback(what); 
} 

say(hello, "world"); 

See it in action.

Наконец, вы, вероятно, извлечете выгоду из изучения того, как работают обратные вызовы и каковы их использование; here - еще один мой вопрос по этому вопросу.

+0

Это не источник для 'forEach' ... – Alnitak

+0

@Alnitak: Это источник для' forEach', о котором идет речь, а не 'Array.forEach'. – Jon

+0

@ Алнитак [Да. Да, это так.] (Http://eloquentjavascript.net/chapter6.html) – h2ooooooo

1

Что вас пугает, так это то, что вы не видите основной механизм forEach ... если бы вы открыли его, вы увидите, что эта функция ожидает анонимную функцию в качестве ее второго параметра и он пройдет все, что ему нужно, в ИТ. Поэтому вы можете ожидать, что парм будет заполнен, когда вы запустите свою функцию. Это определенно сотрясение, когда вы приходите к нему с другого языка, но вы должны верить, что все работает так, как они предназначены для работы.

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