Непонятна работа функции на 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;
}

Почему так происходит?

Если запустить эти два кода в другом месте, то они работают правильно и выдают одинаковый результат.

Например

  1. https://replit.com/@kpripper/variableDeclarationInside#script.js и
  2. 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))

→ Ссылка