makeProfileTimer function makeProfileTimer() { let start = performance.now(); return function() { let end = performance.now(); return `the code took ${end - start}ms`; }; } let timer = makeProfileTimer(); alert("Замеряем время работы этого alert"); alert(timer()); function makeSaver(data){ let newData = data() return () => { return newData } } 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 timer() { console.log(count); const timeout = setTimeout(() => { timer(); }, 1000); if (count > 0) { return (() => { return count--; })(); } clearTimeout(timeout); if (count === 0) { console.log("поехали!"); } } timer();