解决问题:只执行一次的函数javascript
开源程序:underscorejava
有时候咱们会须要使用单例模式,好比须要一个函数,这个函数在整个应用运行的时候只被访问一次。若是再次访问就会访问上次的执行结果。缓存
这个需求的一个经典实现能够在underscore的代码中找到:闭包
_.once = function(func) { var ran = false, memo; return function() { if (ran) return memo; ran = true; memo = func.apply(this, arguments); func = null; return memo; }; };
once能确保func只调用一次,若是用func返回一个什么对象,这个对象成了单例。源码也比较简单,无非就是用一个标志位来标示是否运行过,缓存返回值。能够说,这是闭包应用的一个比较经典的实例。app