说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
给定一个函数 fn ,它返回一个新的函数,返回的函数与原始函数完全相同,只不过它确保 fn 最多被调用一次。
- 第一次调用返回的函数时,它应该返回与 fn 相同的结果。
- 第一次后的每次调用,它应该返回 undefined 。
解题思路
函数在第一次被调用时会执行fn函数,并将其返回值保存在变量res中。然后,将fn重新赋值为一个空函数,这样在之后再次调用新函数时,fn函数就不会再被执行。
最后,新函数返回之前保存的res值。
这个函数的作用是确保fn函数只能被调用一次。
AC代码
/** * @param {Function} fn * @return {Function} */ var once = function(fn) { return function(...args){ const res = fn(...args); fn = ()=>{}; return res; } }; /** * let fn = (a,b,c) => (a + b + c) * let onceFn = once(fn) * * onceFn(1,2,3); // 6 * onceFn(2,3,6); // returns undefined without calling fn */
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。