Memoization思想及近期感想

Memoization,看着觉得好像很高大上,实际上是一个较为简单却很有效的一种思想,提高了代码运行的效率。

作为纯函数,输入不变的情况下,无论输入相同的参数多少次,输出依旧不变。然而对于某些计算较复杂的纯函数,如果在实际程序中有多次调用但输入都是相同的,此时的计算完全可以视为浪费资源,就好比你写数学题辛辛苦苦算出来答案却没有记住,当老师问你最终结果的时候你居然还要重新计算一次一样,很傻。

所以目的很明确,我们需要函数“记住”之前的输入和输出结果,这样,当同样的输入再出现时,我们可以直接返回之前计算出的结果,而不需要再去计算了。实现也比较简单,通过闭包即可。

function memoize(fn) {
  var cachedArg;
  var cachedResult;
  return function(arg) {
    if (cachedArg === arg) {
      return cachedResult;
    }
    cachedArg = arg;
    cachedResult = fn(arg);
    return cachedResult;
  };
}

此例引自https://github.com/react-guide/react-basic,这个例子可以说是最简单的实现,了解了这种强大的思想,就可以创造出各种记忆能力更强大,更贴合实际环境的闭包。

然后是我的个人近期感想。

因为之前的头条笔试被秒杀,以及蘑菇街一面被刷,我意识到了我能力的不足,虽然我因为我的表达能力不好,没有向面试官展现出我实际的能力导致被低估而被刷是一方面,但是最大的原因还是因为,我在前端的学习还是太少,经验太少,即使有货也只是杯水车薪。

然后我最近就开始各种学习,干React组件,开发自己的组件库呀,学TypeScript呀,看ES6呀,依然觉得心里没底,空落落的。为什么?因为这些都不是我真正想要的,我现在纯粹是在为找工作而学习。我对JS和Web开发的确是有兴趣的,但是我现在想要的不是因为工作需要,我才去学webpack,因为别人需要会TS,我才去学TypeScript。我应该跳出为了工作这个圈子去学习,这样才有效率,才有热情,才能真正开发出优秀的,包含我的思想和期待的东西。

程序员最终是为了改变而生的,不管你梦想的大或小。你开发出React和第一次打造出来令自己满意的项目,应该是同样的感觉,是那种创造的满足感和自豪感,以及孜孜不倦的上进心。

发表评论

电子邮件地址不会被公开。 必填项已用*标注