Vue.js v2.1.10 源码探索 v1.1.0

Remerber to keep it Simple,Stupid.Do one thing and do it best.

精髓 cached( )

  /**
     * Create a cached version of a pure function.
     * 创建一个纯函数的缓存版本。
     */
function cached(fn) {
     //首先创建一个没有原型的缓存对象
     var cache = Object.create(null);
     return (function cachedFn(str) {
             //  缓存传入的键值 str
               var value = cache[ str ];
         return (value ? value || cache[ str ]  =  fn(str)     
    })
}

分析1

function cached(fn) {
     // 稍微改造下 为了更好的理解
     var fn    =  fn;  
       //首先创建一个没有原型的缓存对象
     var cache = Object.create(null);

     return (function cachedFn(str) {

             //  缓存传入的键值 str
               var value = cache[ str ];
               console.log(cache, value); // 为了更好的理解
         return (value ? value || cache[ str ]  =  fn(str)     
    })
}

  /**
     * Camelize a hyphen-delimited string.
     * 骆驼化以连字符分隔的字符串
     */
     //命名的细节 RegExp
var  camelizeRE = /-(\w)/g;
var  camelize  = cached(function (str)
 {
     return  str.replace( camelizeRE, function ( _, c){ c ? c.toUpperCase(): '';)
 });  

cached( )里发生了什么

首先返回了 cachedFn( )目的是建一个闭包,
保存了匿名函数 function ( str ) 即 fn 和 缓存对象 cache = { };

接着是让索引
var camelize 指向了闭包function cachedFn( ) 这样垃圾清理机制 就不会清除保存的数据了

好了测试下这个 camelize

camelize('-w') // 缓存的键值对 {-w: "W"}  函数的返回值 "W"

当第一次执行camelize( ) 时
实际是执行了将 (cache[ ‘-w’ ] = ‘W’ );
最后返回了‘W’;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值