Непонятна работа функции на Codewars
вот задача https://www.codewars.com/kata/5b077ebdaf15be5c7f000077
Вот первый код, который проходит все тесты
function countSheep(num) {
var count = "";
let i = 1;
while (i <= num) {
count = count + i + " sheep...";
i++;
}
return count;
}
Вот второй код, который при num==2 выдает '1 sheep...1 sheep...2 sheep...' - и это ошибка, так как ожидалось '1 sheep...2 sheep...'
var count = "";
function countSheep(num) {
let i = 1;
while (i <= num) {
count = count + i + " sheep...";
i++;
}
return count;
}
Почему так происходит?
Если запустить эти два кода в другом месте, то они работают правильно и выдают одинаковый результат.
Например
- https://replit.com/@kpripper/variableDeclarationInside#script.js и
- https://replit.com/@kpripper/variableDeclarationOutside#script.js
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Во втором коде переменная count вынесена из функции и является общей для всех вызовов.
Поэтому при запуске нескольких тестов последовательно, результат в ней накапливается.
В первом случае - переменная count у каждого запуска своя.
function countSheep1(num) {
var count = "";
let i = 1;
while (i <= num) {
count = count + i + " sheep...";
i++;
}
return count;
}
console.log('countSheep1', countSheep1(1))
console.log('countSheep1', countSheep1(2))
var count = "";
function countSheep2(num) {
let i = 1;
while (i <= num) {
count = count + i + " sheep...";
i++;
}
return count;
}
console.log('countSheep2', countSheep2(1))
console.log('countSheep2 count:', count)
console.log('countSheep2', countSheep2(2))