let loop = function(times = 0, callback = null) {
for (let i = 1; i <= times; i++) {
// if (callback == null) {
// clear();
// }
callback(i);
console.log(i);
}
}
function show(par) {
console.log('massage ' + par);
}
function clear(par) {
// console.log('...' + par);
}
loop(3, show);
// loop(3);
Почему нельзя сравнивать callback с null? Отладчик ругается:
Uncaught TypeError: callback is not a function
когда не передаю второй аргумент (то есть callback == null).
Потому что вы пытаетесь вызвать callback(i); в той ситуации, когда у вас callback = null. Вот он и пишет что это не функция.
Я не знаю что вы хотите получить, но в таких ситуациях обычно делается проверка на null перед вызовом. И вызов делается только на не null функцию.
Сравнить можно. Только вызывать/не вызывать ее надо в зависимости от результата сравнения.
if (callback == null) {
...
} else { // !!!
callback(i);
}
или
if (callback != null) {
callback(i);
}
или
let loop = function(times = 0, callback = null) {
if (callback == null)
return;
for (let i = 1; i <= times; i++) {
// ...
}
}
Тут проблема не в проверке на null, а в том, что если callback равен null, то цикл не заканчивается и продолжает отрабатывать дальше, то есть пытаются выполниться строки
callback(i);
console.log(i);
что конечно же невозможно. Вот и ругается, что callback не является функцией.
В итоге, нужно, если callback == null либо делать break;, либо continue;, в зависимости от логики
либо if {} else {}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости