hw12_02_ saver.html 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <header>make Saver</header>
  2. <body>
  3. <script>
  4. const makeSaver = (func) => {
  5. let valueSet = false;
  6. let savedValue = null;
  7. const saver = () => {
  8. if (!valueSet) {
  9. savedValue = func();
  10. valueSet = true;
  11. }
  12. return savedValue;
  13. }
  14. return saver;
  15. }
  16. var saver = makeSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
  17. // в примере). На этом этапе Math.random НЕ вызывается
  18. var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
  19. var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
  20. //в makeSaver функцию;
  21. value1 === value2 // всегда true
  22. var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)])
  23. var value3 = saver2()
  24. var value4 = saver2()
  25. value3 === value4 // тоже должно быть true
  26. let namePrompt = prompt.bind(window, 'Как тебя зовут?')
  27. let nameSaver = makeSaver(namePrompt)
  28. alert(`Привет! Prompt еще не было!`)
  29. alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`)
  30. alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
  31. </script>
  32. </body>