当前位置: 首页 > Web前端 > vue.js

vue缓存方法的使用

时间:2023-03-31 16:28:49 vue.js

知识点:闭包、replace的使用、正则表达式完整代码函数cached(fn){varcache=Object.create(null);return(functioncachedFn(str){varhit=cache[str];returnhit||(cache[str]=fn(str))})}varcamelizeRE=/-(\w)/g;varcamelize=缓存(function(str){returnstr.replace(camelizeRE,function(_,c){returnc?c.toUpperCase():'';})});驼峰式转换的主要原理主要是replace方法的使用(以下内容主要针对当前示例,详细用法见:W3school:JavaScriptreplace()方法或MDN:String.prototype.replace())str.replace(camelizeRE,function(_,c){returnc?c.toUpperCase():'';})正则表达式/-(\w)/g的第一个参数camelizeRE。\w:匹配包括下划线在内的任何单词字符,相当于[A-Za-z0-9_]。正则表达式中有一个全局标志g,replace方法会替换所有匹配的子串,表达式会匹配所有的字符串——后面有字母的字符串,比如'-1','-s'等。parameter是一个函数,主要是将匹配到的两个字符串转换为下一个字符串,并使用toUppserCase方法将后一个字符串转为大写。该函数的第一个参数为匹配的字符串,本例中replace方法的第一个参数为RegExp对象,第二个参数为正则表达式中括号匹配的字符,即正则表达式后面的字符-character(详见replace第二个参数为函数的情况)。函数的返回值将替换匹配的字符串。匹配的字符串应该有两个字符,并且c应该有一个值。为什么要判断第二个参数是否存在,然后使用toUpperCase呢?我还不明白。以正常使用为例hellow-word=>helloWord将中间匹配的字符串-w转换为上面的字符串Wfunction(str){returnstr.replace(camelizeRE,function(_,c){returnc?c.toUpperCase():'';})这段代码的原理,接下来解释缓存的作用functioncached(fn){//创建一个空对象varcache=Object.create(null);return(functioncachedFn(str){//获取缓存对象的str属性的值varhit=cache[str];//如果存在则直接返回,如果没有就调用一次fn,然后存储缓存对象中的结果返回命中||(cache[str]=fn(str))})}缓存的方法接受一个参数作为函数,会创建一个缓存对象用于缓存fn运行的运行结果并返回一个函数cachedFn,函数内部首先在cache对象cache中调用函数cachedFn获取传入的参数str的值,如果cache对象cache中有值,直接返回值,否则调用fn方法传入缓存的函数,然后将运行结果存入缓存。这样,如果两次调用cachedFn,fn会在第一次执行一次,并缓存其运行结果。当第二次调用cachedFn且参数str与上次调用一致时,会直接从缓存对象cache中获取结果。这样就不用再调用fn方法了,省了一次函数run。驼峰('你好世界');运行结果为helloWorld;并且在缓存对象中增加了一个属性'hello-world',对应的值为'helloWorld'再次运行camelize('hello-world')执行varhit=cache[str],缓存['hello-world'']已有值helloWorld,命中为helloWorldreturnhit||(cache[str]=fn(str))直接返回命中值,无需再次调用fn(str)cached方法主要用于缓存字符串处理运行结果的场景。另外,//首字母大写varcapitalize=cached(function(str){returnstr.charAt(0).toUpperCase()+str.slice(1)});