Kết quả hàm sau là gì? Hãy giải thích tại sao?
Kết quả hàm sau là gì? Hãy giải thích tại sao?
const add = () => {
const cache = {};
return (num) => {
if (num in cache) {
return `From cache! ${cache[num]}`;
} else {
const result = num + 10;
cache[num] = result;
return `Calculated! ${result}`;
}
};
};
const addFunction = add(); console.log(addFunction(10)); console.log(addFunction(10)); console.log(addFunction(5 * 2));
Calculated! 20
Calculated! 20
Calculated! 20
Calculated! 20
From cache! 20
Calculated! 20
Calculated! 20
From cache! 20
From cache! 20
Calculated! 20
From cache! 20
Error
Hàm add
chính là một hàm memoized (hàm có nhớ). Với việc có nhớ, chúng ta có thể cache lại kết quả của function để tăng tốc độ tính toán lên. Trong trường hợp này, chúng ta tạo ra một cache
object để lưu trữ những kết quả tính toán trước đó.
Mỗi lần chúng ta gọi hàm addFunction
với đối số giống nhau, đầu tiên nó sẽ check xem đối số đó có tồn tại trong cache hay không. Nếu có, giá trị trong cache sẽ được trả về luôn, tiết kiệm thời gian tính toán. Còn nếu không thì nó sẽ tiến hành tính toán kết quả và tiếp tục lưu vào cache.
Chúng ta gọi hàm addFunction
ba lần với cùng một đối số: trong lần gọi đầu tiên, giá trị của num
là 10
và chưa có mặt trong cache. Do đó num in cache
trả về false
, và sẽ chạy vào else block: Calculated! 20
sẽ được ghi ra, và 10 sẽ được đưa vào cạche. cache
khi này sẽ là { 10: 20 }
.
Tại lần gọi thứ hai, cache
object đã có giá trị 10
. num in cache
trả về true
, và 'From cache! 20'
được ghi ra.
Tại lần gọi thứ ba, ta đưa vào 5 * 2
, tức 10
vào hàm. Tiếp tục giống như trên, 'From cache! 20'
sẽ được ghi ra.
middle
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào