области видимости и замыкание

Реализуйте функцию createCounter (initValue: number), которая работает следующим образом:

let counter = createCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2
--------------------------------------
let counter = createCounter(13);
console.log(counter()); // 13
console.log(counter()); // 14
console.log(counter()); // 15*/

Как сделать, чтобы считало с нуля - я поняла. А вот с 13 уже проблемы. Что за (initValue: number) двоеточие в параметрах функции мне тоже непонятно.

function makeCounter() {   

    function counter() {  
        return counter.count++; 
    };

    counter.count = 0;  

    return counter;   
}

let counter = makeCounter(); 
console.log(counter());
console.log(counter());

Ответы (2 шт):

Автор решения: entithat

Чтобы можно было увеличивать от определенного числа, нам надо передавать собственно это число в функцию.

initValue уже будет у нас сохранена в makeCounter. makeCounter возвращает функцию, которая увеличивает этот же initValue.

let makeCounter=(initValue=0)=>()=>initValue++;

let c1 = makeCounter(); 
console.log(c1());
console.log(c1());
console.log(c1());
console.log(c1());

let c2 = makeCounter(13); 
console.log(c2());
console.log(c2());
console.log(c2());
console.log(c2());

console.log(c1());
console.log(c2());


Насчет двоеточия. Это способ указания типа значения в Typescript, которое должно передаваться в функцию. В нашем случае только число.

function makeCounter(initValue: number = 0) {
  return function(): number {
    return initValue++;
  }
};

let c1 = makeCounter(2);

console.log(c1());
console.log(c1());
console.log(c1());

→ Ссылка
Автор решения: Alia Tempora
function makeCounter(initValue = 0) {
    let count = initValue;
    return function () {
        return count++;
    };
    
}

let counter = makeCounter();
console.log(counter());
console.log(counter());
console.log(counter());
console.log(counter());
→ Ссылка