Moim celem w poniższym kodzie jest, aby każda funkcja przekazana do fn była wywoływana TYLKO raz. na przykład wynik zwraca 5, a powtórzone wywołanie poniżej również powinno zwrócić tę samą liczbę. To, co mam w tej chwili, zwraca nowy numer zamiast tego samego.
function once(fn) {
var done = false;
return function () {
if (!done) {
done = true;
return fn.apply(this, arguments);
} else if (done) {
return fn.apply(this, arguments);
}
};
}
function add(x, y) {
return x + y;
}
var addOnce = once(add);
var result = addOnce(2, 3);
result = addOnce(4, 4);
1
Alex C.
5 grudzień 2018, 11:45
1 odpowiedź
Najlepsza odpowiedź
Aby uzyskać tę samą wartość, możesz przechowywać wartość i zwracać ją przy każdym wywołaniu.
function once(fn) {
var done = false,
value;
return function() {
if (!done) {
done = true;
value = fn.apply(this, arguments);
}
return value;
};
}
function add(x, y) {
return x + y;
}
var addOnce = once(add);
console.log(addOnce(2, 3)); // 5
console.log(addOnce(4, 4)); // 5
2
Nina Scholz
5 grudzień 2018, 11:56