Циклы
for...of
перечисляют итератор, присутствующий в Symbol.iterator
, используя итерационный протокол . Это означает, что поведение итератора будет полностью обойдено традиционным для l oop. Тем не менее, во многих случаях вы имеете дело с массивом или подобным массиву объектом, который может быть перечислен с использованием целочисленных индексов.
Для этих простых случаев они переводят примерно , например, :
for(let x of [1,2,3]) {
console.log(x)
}
примерно эквивалентно:
for (var _i = 0, _arr = [1, 2, 3]; _i < _arr.length; _i++) {
var x = _arr[_i];
console.log(x);
}
В вашем коде for...of
используется для перечисления массива MutationRecord
объектов, переданных обратному вызову MutationObserver
. for...of
работает с массивами, потому что Array
имеет Symbol.iterator
в своем прототипе. Обычный старый для l oop также будет работать, потому что массивы имеют элементы с ключами, которые соответствуют целым числам, к которым можно обратиться, используя обозначение в скобках (например, arr[0]
).