这段代码是要干嘛?

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()
})


小怪兽爱吃肉
浏览 516回答 1
1回答

慕村9548890

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", 然后小写化~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript