为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码是要干嘛?

这段代码是要干嘛?

小怪兽爱吃肉 2018-10-10 14:13:15
function cached (fn) {  var cache = Object.create(null)  return function cachedFn (str) {    var hit = cache[str]     return hit || (cache[str] = fn(str))   } }var hyphenateRE = /([^-])([A-Z])/gvar hyphenate = cached(function (str) {  return str     .replace(hyphenateRE, '$1-$2')     .replace(hyphenateRE, '$1-$2')     .toLowerCase() })
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

cached 是经典的memoization, 可以把一个function转换成一个具备cache功能的新函数, 对于已知会重复计算的函数或者递归调用型的函数有很好的优化效果, 用空间换时间(因为相同的输入只会计算一次, 重复调用从cache中取).

其中Object.create(null)是非常棒的创建全空object的方法, 是es6引入的新用法, 因为传入null, 所以创建的object连prototype都没有, 所以后面连hasOwnProperty的检查都可以避免了.

至于hyphenate, 只是单纯的把camelCase转成hyphen-case(-连接的)

至于用两个replace是为了可以转换此种结构:"AAAA", 第一次会变成: "A-AA-A", 第二次就可以彻底分割开了: "A-A-A-A", 然后小写化~


查看完整回答
反对 回复 2018-11-02
  • 1 回答
  • 0 关注
  • 515 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信