function makeProfileTimer() { let start = performance.now(); return function() { let end = performance.now(); return end - start }; } let timer = makeProfileTimer(); alert("Замеряем время работы этого alert"); alert(`This code took ${timer()}ms`); function makeSaver(data){ let promptShowed = false; let newData; return () => { if(!promptShowed) { promptShowed = true; return newData = data() } } } var saver = makeSaver(Math.random) var value1 = saver() var value2 = saver() console.log(value1, value2) console.log(value1 === value2 ) var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]) var value3 = saver2() var value4 = saver2() console.log(value3 === value4) let namePrompt = prompt.bind(window, 'Как тебя зовут?') let nameSaver = makeSaver(namePrompt) alert(`Привет! Prompt еще не было!`) alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`) alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`) let count = 5; function timer2() { console.log(count); const timeout = setTimeout(() => { timer(); }, 1000); if (count > 0) { return (() => { return count--; })(); } clearTimeout(timeout); if (count === 0) { console.log("поехали!"); } } timer2();