JavaScript jest również funkcjonalnym językiem programowania. To, co tu masz, to "funkcja wyższego rzędu", funkcja, która przyjmuje funkcję jako parametr. Funkcje wyższego rzędu są synchroniczne (ale patrz uwaga poniżej).
Źródło:
map()
jest typowym przykładem funkcję wyższego rzędu. Zajmuje funkcję i stosuje ją do wszystkich elementów tablicy. Definicja brzmi bardzo "funkcjonalnie". Ta funkcja nie jest również zapewniana przez węzeł. Jest to udokumentowane przez MDN Array.prototype.map() i określone przez ECMAScript 5.1.
Aby odpowiedzieć na pytanie: Tak, doSomething(nodeIDs)
jest nazywane po wszystkie elementy zostały zastosowane.
Uwaga: Funkcja wyższego rzędu jest pojęciem programowania funkcjonalnego. JavaScript jest funkcjonalny, ale również głęboko osadzony w praktyczności wykonywania kodu wewnątrz przeglądarki lub na serwerze. Powiedziałbym, że na przykład
setTimeout()
nie jest funkcją wyższego rzędu, nawet jeśli przyjmuje funkcję jako parametr, ponieważ
setTimeout()
nie jest tak naprawdę czysto funkcjonalna, ponieważ wykorzystuje czas. Czysta funkcjonalność jest ponadczasowa. Na przykład wynik
map()
nie zależy od czasu. I o to właśnie chodzi w tym pytaniu. Jeśli coś nie zależy od czasu, wykonasz je synchronicznie. Problem rozwiązany.
Dzięki Simonowi za kwestionowanie definicji funkcji wyższego rzędu w JavaScript.
co to jest tutaj? map pobiera funkcję wywołania zwrotnego, aby zastosować ją do każdego elementu listy, a nie wywołania zwrotnego po zakończeniu iteracji. – chovy
Dzięki chowii.Jeśli chodzi o $, po prostu eksperymentowałem z modułem jQuery i nie zadawałem sobie trudu, żeby to zmienić. – bonchef