12345678910111213141516171819202122232425262728293031323334353637383940 |
- <header>make Saver</header>
- <body>
- <script>
- const makeSaver = (func) => {
- let valueSet = false;
- let savedValue = null;
- const saver = () => {
- if (!valueSet) {
- savedValue = func();
- valueSet = true;
- }
- return savedValue;
- }
- return saver;
- }
- var saver = makeSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
- // в примере). На этом этапе Math.random НЕ вызывается
- var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
- var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
- //в makeSaver функцию;
- value1 === value2 // всегда true
- 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()
- value3 === value4 // тоже должно быть true
- let namePrompt = prompt.bind(window, 'Как тебя зовут?')
- let nameSaver = makeSaver(namePrompt)
- alert(`Привет! Prompt еще не было!`)
- alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`)
- alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
- </script>
- </body>
|