Правило consistent-return
требует, чтобы функция либо всегда возвращала значение, либо никогда не возвращала (явно или через undefined
). Это означает:
function getUser(id) {
if (id) {
return db.findUser(id); // возвращает объект
}
// неявно возвращает undefined
}
function getUser(id) {
if (id) {
return db.findUser(id);
}
return null; // явный возврат
}
Движок V8 использует следующие оптимизации, которые зависят от согласованного возврата:
V8 кэширует типы возвращаемых значений функций. Если функция возвращает разные типы (объект/undefined/число), это:
Когда функция возвращает объекты с разной структурой:
Особенно критично для конструкторов:
function User(name) {
if (!name) return; // опасно!
this.name = name;
}
new
undefined
вместо экземпляраТест показывает разницу:
// Несогласованный возврат
function inconsistent(x) {
if (x) return { value: x };
}
// Согласованный возврат
function consistent(x) {
if (x) return { value: x };
return null;
}
// Время выполнения 1 млн вызовов:
// inconsistent: ```120ms
// consistent: ```85ms
const result = getUser();
console.log(result.name); // TypeError если undefined
Следование правилу consistent-return
- это не только стилевое требование, но и важная практика для производительных и надежных JavaScript-приложений.