Метод querySelectorAll
возвращает NodeList
, который похож на массив, но это не совсем массив. Таким образом, у него нет метода forEach
(какие объекты массива наследуются через Array.prototype
).
Так как NodeList
похож на массив, методы массива будут работать на нем, поэтому используя [].forEach.call
, вы вызываете метод Array.prototype.forEach
в контексте NodeList
, как если бы вы могли просто сделать yourNodeList.forEach(/*...*/)
.
Обратите внимание, что пустой литерал массива просто ярлык к расширенной версии, который вы, вероятно, увидите довольно часто:
Array.prototype.forEach.call(/*...*/);