VUE源码学习——camelize:将连字符-连接的字符串转化成驼峰标识的字符串、缓存函数、纯函数

一、camelize

        vue源码中有这样一段代码:

  /**
   * Create a cached version of a pure function.
   */
  function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
      var hit = cache[str];
      return hit || (cache[str] = fn(str))
    })
  }

  /**
   * Camelize a hyphen-delimited string.
   */
  var camelizeRE = /-(\w)/g;
  var camelize = cached(function (str) {
    return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  });

        定义一个正则camelizeRE,其含义是将字符串中所有连字符 '-' 和连字符后的字母替换为连字符后的字母大写,即将连字符连接的字符串改为驼峰。

        定义cached函数,该函数创建一个空对象{},赋值给cache,返回一个cachedFn函数(闭包)。在cachedFn中,将cache中键名为参数str的值赋给hit,如果hit有值,则返回,否则,将参数str转为驼峰式字符串以键值对形式存储在cache中,键名为参数str,值为str的驼峰式。

  • 例如,运行camelize('search-form');camelize('search-form'):
  • 运行第一个camelize('search-form'),创建一个空对象cache
  • 将cache['search-form']赋值给hit,这时hit为undefined
  • 运行cache[str] = fn(str)
    运行str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  • 此时cache['search-form'] = 'searchForm'
  • 返回'searchForm'
  • 运行第二个camelize('search-form')
  • 将cache['search-form']赋值给hit,这时hit为'searchForm'
  • 返回'searchForm'

二、缓存函数

        上文说到cachedFn返回一个函数,是一个闭包,所以cache会一直在内存中,以此达到缓存的目的 。因此,上面的cached其实是一个缓存函数,缓存的内容是字符串的驼峰式,在实际应用中,我们也可以改造它,使它缓存我们需要的内容,比如缓存身份证号、商品库存、自增等。

var person = [
    {name:'张三',id:'214325199602034526'},
    {name:'李四',id:'214325199804125632'}
]
function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
      var hit = cache[str];
      console.log(hit || (cache[str] = fn(str)))
    })
  }

  var camelize = cached(function (str) {
    console.log('开始缓存' + str)
    let item = person.filter((val) => val.name === str)
    return item[0].id;
  });
camelize('张三')
camelize('李四')
console.log('开始取出缓存')
camelize('张三')
camelize('李四')

输出如下:

  • 第一次运行camelize('张三'),hit为undefined,运行fn,即查找张三的id并返回,赋值给cache['张三'],输出张三的id;
  • 第一次运行camelize('李四'),同上;
  • 第二次运行camelize('张三'),输出cache['张三'],也就是缓存起来的张三的id
  • 第二次运行camelize('李四'),同上。

三、纯函数

        纯函数指的是输入与输出相同的函数。因此,上述缓存函数中,只需要将缓存改成字符串自身,就可以实现一个纯函数。不再赘述。

总结

        本篇记录了vue源码中camelize函数的相关内容,如有错误,欢迎斧正~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值