В книге Eloquent Javascript, в главе 6 есть следующий пример:
class Matrix {
constructor(width, height, element = (x, y) => undefined) {
this.width = width;
this.height = height;
this.content = [];
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
this.content[y * width + x] = element(x, y);
}
}
}
//...
}
Как видите, третий параметр конструктора - это не просто параметр обратного вызова, но фактически реализация обратного вызова.
Сначала я подумал, что, возможно, тело реализованной функции обратного вызова игнорируется, но, по крайней мере, будущие обратные вызовы, используемые в конструкторе, будут проверены на такую же сигнатуру. Однако я обнаружил, что подписи не имеют значения, так как код ниже будет работать:
const test = new Matrix(2, 4, () => console.log('hello'));
Так какой смысл реализовывать обратный вызов, являющийся параметром функции? Может ли читатель определить, сколько параметров будет передано в обратный вызов?