Напишите функцию 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, время: 18:36. |