Правильно - отказаться от написания собственных велосипедов и использовать то, что уже есть в языке:
Math.max(...list)
Работает все ок...
Не ок. Попробуйте добавить в конец массива ещё одно значение, меньше текущего максимального и больше или равное минимальному. 1, например. И посмотрите, что вернёт ваша функция. Будете удивлены.
UPD. Если уж писать собственную функцию, то стоит сделать её более универсальной - давайте искать максимум среди любых значений, а не только чисел. И пусть источником этих значений может быть не обязательно массив. Вот как-то так:
function max(data, key = n => n) {
const getVal = key instanceof Function ? key : n => n[key];
let result = void 0;
for (const n of data) {
const val = getVal(n);
result = result && result[1] > val ? result : [ n, val ];
}
return result && result[0];
}
max([ 12, 9, -47, 83, 22 ]) // 83
max('240815', Number) // '8'
max(document.images, 'width') // не знаю, что выдаст вам, сами посмотрите
max((function*() {
yield 'aaa';
yield 'b';
yield 'cccc';
yield 'ddd';
})(), n => n.length) // 'cccc'