javascript - 这段代码是要干嘛?
ringa_lee
ringa_lee 2017-04-11 10:12:25
[JavaScript讨论组]
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])/g
var hyphenate = cached(function (str) {
  return str
    .replace(hyphenateRE, '$1-$2')
    .replace(hyphenateRE, '$1-$2')
    .toLowerCase()
})
ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHP中文网

缓存结果避免重复计算吧..

 var hit = cache[str]
    return hit || (cache[str] =  fn(str))

这二行是关键吧

存在了就直接用

阿神

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", 然后小写化~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号