Напишите функцию makeSaver
Напишите функцию makeSaver, которая:
var saver = makeSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random // в примере). На этом этапе Math.random НЕ вызывается var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную //в makeSaver функцию; value1 === value2 // всегда true Таким образом makeSaver решает две задачи: Навсегда сохраняет результат функции. Это актуально, например, для Math.random. Действует лениво, то есть вызывает Math.random только тогда, когда результат действительно нужен. Если же по каким-то причинам значение не понадобится, то Math.random даже не будет вызван function makeSaver(fn){ return function (){ return fn; } } var saver = makeSaver(Math.random()); Можете помочь понять, пожалуйста? Начало кода хоть верное? |
makeSaver=fn=>{ var x = fn(); return _=> x; }; var saver = makeSaver(Math.random); var value1 = saver(); var value2 = saver(); alert(value1 === value2); |
Спасибо, но это то, что написано в задании.
|
Есть у кого-то ещё варианты, что бы работало как в задании написано.
Я пока вот такой код написал, но надо его дописать: function makeSaver(x){ var x = x(); function save(){ return x; } return value1 = save; } var saver = makeSaver(Math.random); value1 = saver(); value2 = saver(); |
function makeSaver(callable) { let res, executed = !1; return function() { return executed ? res : (executed = !0, res = callable()); }; }; var saver = makeSaver(Math.random); value1 = saver(); value2 = saver(); alert(value1 === value2); |
Цитата:
надо сравнивать с undefined а лучше отдельную переменную, флажок что функция была вызвана |
мои пять копеек %)
<script> const saver = foo => { let seed = null return { gen: function () { seed = foo() return this }, get value() { return seed } } } const maker = saver(Math.random).gen() console.log(maker.value) console.log(maker.value) maker.gen() console.log(maker.value) </script> возможно, ТС имеет ввиду Singleton https://www.dofactory.com/javascript...design-pattern https://medium.com/@frontman/%D1%80%...s-20d64da9d44b |
Цитата:
|
SuperZen,
если с тегами script пишите, оборачивайте в <HTML run> |
Nexus, взято здесь
https://developer.mozilla.org/ru/doc...ts/Math/random Метод Math.random() возвращает псевдослучайное число с плавающей запятой из диапазона [0, 1), то есть, от 0 (включительно) до 1 (но не включая 1 ну и соответственно при res||(res=callable()); если res будет 0, то выполнится второе условие... |
Часовой пояс GMT +3, время: 17:42. |