#javascript #for-loop
#javascript #for-цикл
Вопрос:
В чем основное различие между for
циклами и for..of
циклами в контексте итерации по массиву?
Почему этот код
for (let n of at.neighbours) {
DFS(n);
}
выдавать выходные данные, отличные от этого кода?
for (let i = 0; i < at.neighbours.length; i ) {
n = at.neighbours[i]
DFS(n);
}
Кстати, это моя функция:
function DFS(at) {
if (at.visited) return;
at.visited = true
// for (let i = 0; i < at.neighbours.length; i ) {
// n = at.neighbours[i]
// DFS(n);
// }
// This gives desired output
for (let n of at.neighbours) {
DFS(n);
}
}
Комментарии:
1.
for...of
больше похоже наforEach()
,for
больше похожеfor...in
2. нет, просто синтаксический сахар, чтобы сделать код более читаемым, когда вы видите,
for...of
илиfor...in
вы уже знаете, что вы будете читать элемент за элементом, вероятно, от начала до конца, в линейном порядке3. Чао, извините, но когда в for (let …) вы вызываете функцию DFS, должно быть
neighbours[i].at
или я ошибаюсь? Какneighbours
это выглядит?4.
for..of
является более общим, уменьшает беспорядок и изменяемое состояние и позволяет цели определять, как оно должно быть повторено. Последнее очень важно.
Ответ №1:
Основное различие
for
оператор позволяет выполнять итерации по повторяющимся объектам, одновременно управляя начальным и конечным условием.
for...of
также может использоваться для перебора повторяющихся объектов (массивов и массивоподобных объектов, а также определяемых пользователем повторяющихся объектов). Операция выполняется для значения каждого отдельного свойства, если только она не завершается использованием ключевых слов break
, return
или throw
.
forEach
метод доступен как прототип метода итеративных объектов, но он выполняется для каждого элемента, если не выдается ошибка. (В идеале следует использовать, только если операция должна выполняться над каждым элементом)
С точки зрения производительности,
for
оператор превосходит все другие операторы итерации. Обратитесь к этому
С точки зрения поддержки,