游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

12JavaScript高频速写题

  1。防抖防抖:可以和你的电脑设定了10分钟睡眠时间的场景结合起来理解如果你一直在用电脑,那么电脑就不会睡眠(频繁的把前一个定时器关掉,开启新的定时器)当你最后一次没操作电脑10分钟之后,电脑陷入睡眠constdebouncefunction(func,delay){lettimernullreturnfunction(。。。args){clearTimeout(timer)timersetTimeout((){func。apply(this,args)},delay)}}测试html部分inputtypetextidinputjs部分constshowNamedebounce(function(name){console。log(input。value,this,name)},500)input。addEventListener(input,(e){500ms内停止输入才会输出showName。call({name:前端胖头鱼},前端胖头鱼)})2。节流
  节流:任凭你怎么触发,其在指定的时间间隔内只会触发一次基于时间戳(方式1)constthrottlefunction(func,delay){letstartTimeDate。now()returnfunction(。。。args){letlastTimeDate。now()if(lastTimestartTimedelay){func。apply(this,args)startTimeDate。now()}}}测试lett1Date。now()constshowNamethrottle(function(name){constt2Date。now()console。log(this,name,t2t1)t1Date。now()},1000)虽然设置了每隔10毫秒就会执行一次showName函数,但是实际还是会每隔1秒才输出setInterval((){showName。call({name:前端胖头鱼},前端胖头鱼)},10){name:前端胖头鱼}前端胖头鱼1013{name:前端胖头鱼}前端胖头鱼1001{name:前端胖头鱼}前端胖头鱼1006{name:前端胖头鱼}前端胖头鱼1006{name:前端胖头鱼}前端胖头鱼1005基于setTimeout(方式2)constthrottle2function(func,delay){lettimernullreturnfunction(。。。args){if(!timer){timersetTimeout((){func。apply(this,args)timernull},delay)}}}测试lett1Date。now()constshowNamethrottle2(function(name){constt2Date。now()console。log(this,name,t2t1)t1Date。now()},1000)setInterval((){showName。call({name:前端胖头鱼},前端胖头鱼)},10){name:前端胖头鱼}前端胖头鱼1014{name:前端胖头鱼}前端胖头鱼1001{name:前端胖头鱼}前端胖头鱼1007{name:前端胖头鱼}前端胖头鱼1011{name:前端胖头鱼}前端胖头鱼1009{name:前端胖头鱼}前端胖头鱼10083。函数柯里化constcurry(func,。。。args){获取函数的参数个数constfnLenfunc。lengthreturnfunction(。。。innerArgs){innerArgsargs。concat(innerArgs)参数未搜集足的话,继续递归搜集if(innerArgs。lengthfnLen){returncurry。call(this,func,。。。innerArgs)}else{否则拿着搜集的参数调用funcfunc。apply(this,innerArgs)}}}测试constaddcurry((num1,num2,num3){console。log(num1,num2,num3,num1num2num3)})add(1)(2)(3)1236add(1,2)(3)1236add(1,2,3)1236add(1)(2,3)12364。bind
  bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被指定为bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。MDN
  姐妹篇call实现
  姐妹篇apply实现Function。prototype。bind2function(context,。。。args){if(typeofthis!function){thrownewTypeError(Bindmustbecalledonafunction)}constexecuteBoundfunction(sourceFunc,boundFunc,context,callingContext,args){if(!(callingContextinstanceofboundFunc)){如果调用方式不是newfunc的形式就直接调用sourceFunc,并且给到对应的参数即可returnsourceFunc。apply(context,args)}else{类似于执行new的几个过程constselfObject。create(sourceFunc。prototype)处理new调用的形式constresultsourceFunc。apply(self,args)判断函数执行后的返回结果非对象函数,则返回selfif(resulttypeofresultobjecttypeofresultfunction){returnresult}else{returnself}}}constfuncthisconstboundfunction(。。。innerArgs){returnexecuteBound(func,bound,context,this,args。concat(innerArgs))}returnbound}测试1。普通调用constshowNamefunction(sex,age){console。log(this,sex,age)}showName。bind2({name:前端胖头鱼},boy)(100){name:前端胖头鱼}boy1002。new调用constPersonfunction(name){this。namename}Person。prototype。showNamefunction(age){console。log(this,this。name,age)}constbindPersonPerson。bind(null,boy)constp1newbindPerson(前端胖头鱼)p1。showName(100)Person{name:boy}boy1005。实现一个简易版模板引擎
  jQuery时代,模板引擎用的还是比较多的,可以理解为它是这样一个函数,通过模板数据经过一段黑盒操作最后得到需要展示的页面constrender(template,data){s?是为了兼容{{name}}{{name}}这种写法returntemplate。replace({{s?(w)s?}}g,(match,key){匹配中了则读取替换,否则替换为空字符串returnkeydata。hasOwnProperty(key)?data〔key〕:})}constdata{name:前端胖头鱼,age:100}consttemplate我是:{{name}}年龄是:{{age}}console。log(render(template,data))我是:前端胖头鱼年龄是:1006。类数组转化为数组的4种方式类数组转化为数组constarrayLikeObj{0:前端胖头鱼,1:100,length:2}1。〔〕。sliceconsole。log(〔〕。slice。call(arrayLikeObj))2。Array。fromconsole。log(Array。from(arrayLikeObj))3。Array。applyconsole。log(Array。apply(null,arrayLikeObj))4。〔〕。concatconsole。log(〔〕。concat。apply(〔〕,arrayLikeObj))7。请实现DOM2JSON一个函数,可以把一个DOM节点输出JSON的格式
  曾经在字节的面试中出现过constdom2json(rootDom){if(!rootDom){return}letrootObj{tagName:rootDom。tagName,children:〔〕}constchildrenrootDom。children读取子节点(元素节点)if(childrenchildren。length){Array。from(children)。forEach((ele,i){递归处理rootObj。children〔i〕dom2json(ele)})}returnrootObj}
  测试!DOCTYPEhtmlhtmllangenheadmetacharsetUTF8metahttpequivXUACompatiblecontentIEedgemetanameviewportcontentwidthdevicewidth,initialscale1。0titledom2jsontitleheadbodypclassphelloworldspanclassname前端胖头鱼spanspanclassage100spanbodyhtml
  image。png8。列表转树形结构
  相信大家工作中也遇到过类似的问题,前端需要的是树形结构的数据,但是后台返回的是一个list,我们需要将list转化为树形结构(当然这里你也可以把你的后端同学干啪为啥不给我想要的数据)。constarrayToTree(array){consthashMap{}letresult〔〕array。forEach((it){const{id,pid}it不存在时,先声明children树形这一步也有可能在下面出现if(!hashMap〔id〕){hashMap〔id〕{children:〔〕}}hashMap〔id〕{。。。it,children:hashMap〔id〕。children}处理当前的itemconsttreeIthashMap〔id〕根节点,直接pushif(pid0){result。push(treeIt)}else{也有可能当前节点的父父节点还没有加入hashMap,所以需要单独处理一下if(!hashMap〔pid〕){hashMap〔pid〕{children:〔〕}}非根节点的话,找到父节点,把自己塞到父节点的children中即可hashMap〔pid〕。children。push(treeIt)}})returnresult}测试constdata〔注意这里,专门把pid为1的元素放一个在前面{id:2,name:部门2,pid:1},{id:1,name:部门1,pid:0},{id:3,name:部门3,pid:1},{id:4,name:部门4,pid:3},{id:5,name:部门5,pid:4},{id:7,name:部门7,pid:6},〕console。log(JSON。stringify(arrayToTree(data),null,2))〔{id:1,name:部门1,pid:0,children:〔{id:2,name:部门2,pid:1,children:〔〕},{id:3,name:部门3,pid:1,children:〔{id:4,name:部门4,pid:3,children:〔{id:5,name:部门5,pid:4,children:〔〕}〕}〕}〕}〕9。树形结构转列表
  反过来也可以试试看consttree2list(tree){letlist〔〕letqueue〔。。。tree〕while(queue。length){从前面开始取出节点constnodequeue。shift()constchildrennode。children取出当前节点的子节点,放到队列中,等待下一次循环if(children。length){queue。push(。。。children)}删除多余的children树形deletenode。children放入列表list。push(node)}returnlist}测试constdata〔{id:1,name:部门1,pid:0,children:〔{id:2,name:部门2,pid:1,children:〔〕},{id:3,name:部门3,pid:1,children:〔{id:4,name:部门4,pid:3,children:〔{id:5,name:部门5,pid:4,children:〔〕}〕}〕}〕}〕console。log(tree2list(data))〔{id:1,name:部门1,pid:0},{id:2,name:部门2,pid:1},{id:3,name:部门3,pid:1},{id:4,name:部门4,pid:3},{id:5,name:部门5,pid:4}〕10。sleep
  实现一个函数,n秒后执行函数funcconstsleep(func,delay){returnnewPromise((resolve){setTimeout((){resolve(func())},delay)})}constconsoleStr(str){return(){console。log(str)returnstr}}constdoFnsasync(){constnameawaitsleep(consoleStr(前端胖头鱼),1000)constsexawaitsleep(consoleStr(boy),1000)constageawaitsleep(consoleStr(100),1000)console。log(name,sex,age)}doFns()前端胖头鱼1slaterboy2slater1003slater前端胖头鱼boy10011。菲波那切数列斐波那契数,通常用F(n)表示,形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)0,F(1)1F(n)F(n1)F(n2),其中n1给你n,请计算F(n)。示例1:输入:2输出:1解释:F(2)F(1)F(0)101示例2:输入:3输出:2解释:F(3)F(2)F(1)112示例3:输入:4输出:3解释:F(4)F(3)F(2)213暴力实现
  根据题目意思,很容易写出下面递归的暴力代码constfib(n){if(n0){return0}if(n1n2){return1}returnfib(n2)fib(n1)}测试console。log(fib(1))1console。log(fib(2))1试着统计一下计算时间constt1Date。now()console。log(fib(44))701408733console。log(Date。now()t1)接近4393缓存优化
  上面的代码可以实现效果,但是性能堪忧,来看一个计算fib(10)的过程计算101098需要计算9和8987需要计算8和7876需要计算7和6765需要计算6和5654需要计算5和4543需要计算4和3432需要计算3和2210需要计算1和0
  这个过程中如果按照上面暴力实现的代码会重复多次计算某些曾经计算过的值,比如8、7、6、5。。。等等,这个损耗是没有必要的,所以我们可以把计算的结果进行缓存,下次遇到求同样的值,直接返回即可constfib(n){缓存过直接返回if(typeoffib〔n〕!undefined){returnfib〔n〕}if(n0){return0}if(n1n2){return1}constresfib(n2)fib(n1)缓存计算的结果fib〔n〕resreturnres}console。log(fib(1))1console。log(fib(2))1constt1Date。now()console。log(fib(44))701408733console。log(Date。now()t1)1ms12。实现一个函数sum函数
  实现一个函数sum函数满足以下规律sum(1,2,3)。valueOf()6sum(2,3)(2)。valueOf()7sum(1)(2)(3)(4)。valueOf()10sum(2)(4,1)(2)。valueOf()9
  分析
  仔细观察这几种调用方式可以得到以下信息sum函数可以传递一个或者多个参数sum函数调用后返回的是一个新的函数且参数可传递一个或者多个调用。valueOf时完成最后计算
  看起来是不是有点函数柯里化的感觉,前面的函数调用仅仅是在缓存每次调用的参数,而valueOf的调用则是拿着这些参数进行一次求和运算并返回结果constsum(。。。args){声明add函数,其实主要是缓存参数的作用注意add调用完成还是会返回add函数本身,使其可以链式调用constadd(。。。args2){args〔。。。args,。。。args2〕returnadd}求和计算add。valueOf()args。reduce((ret,num)retnum,0)returnadd}测试console。log(sum(1,2,3)。valueOf())6console。log(sum(2,3)(2)。valueOf())7console。log(sum(1)(2)(3)(4)。valueOf())10console。log(sum(2)(4,1)(2)。valueOf())9

没冰箱没空调,古人夏天怎么熬?当猛热袭来你是否也为古人担心过炎炎夏日没冰箱没空调咋熬啊其实,在有限的条件下古人也能打造出绿色的清凉生活相信看完本文你会惊叹老祖宗们击退暑热……尼克松访华,送给中国一份大礼,揭开了电影中阿多丸沉船之谜1972年,时任美国总统尼克松首次访问中国,开启了一段中美破冰的旅程。为了缓和中美的紧张关系,尼克松还特意带来了一份大礼,那就是二战时期的一艘日本沉船的位置图。早在194……五胡乱华,之后的结局怎样呢?八王之乱后西晋衰落,这时候周边的少数民族开始兴起并入侵中原,三百一十六年前,赵刘曜攻长安,俘虏晋愍帝西晋灭亡,这也标志着五湖乱华正式开始之后,匈奴,鲜卑,羯羌氐等民族进入中原,……王者归来?TCL98寸巨屏商显冲击会议室市场开会是企业运转的关键,关乎到商业行为的洽谈、决策、执行。据了解,此前全球超7500万个会议室,其中绝大部分配置的是传统投影仪或者家用电视,再配以音响、拾音器、摄像头等诸多设备保……玫瑰之战徐慕岩原形毕露,却还是送了顾念一句良心话电视剧《玫瑰之战》是一部以律师行业为背景的都市职场剧,由袁泉、黄晓明、俞飞鸿领衔主演,还有王志飞、代旭、隋俊波、芦芳生等实力演员,在剧中饰演重要角色,正在央视八套热播中。……完美男神周恩来,武功高,喝趴许世友喝退国民党,疼爱妻子邓颖超在多数人的印象里,周恩来是一个儒雅,正气,坚硬的美男子,酒量,武术,和他不沾边。实际上,周恩来不仅酒量大,而且武术也很高,曾在军中不仅把许世友喝趴下了,而且在与国民党谈判的酒桌……著名地标石老人发生坍塌诸多市民纷纷表示惋惜来源:【青岛信网】信网10月3日讯昨夜今晨,青岛经历了连续数小时的雷雨大风,有市民发现青岛著名地标石老人坍塌。据现场画面显示,石老人的头部和胳膊损毁严重,碎石一片。市民纷……德耀中华第八届全国道德模范候选人事迹(下)418孙景坤419孙滨生420杜发荣421李玉兰422李兰423李凯424李顺清425李俊贤426李恒427李夏42……2天7个瓜,杨紫笠分享动态被嘲,聂远喜获二女儿,娱乐圈又乱了娱乐圈,真不太平,兔年刚过,大家都沉浸在新年的喜悦当中,然而娱乐圈内却是风起云涌,新年这两天,圈内又曝出了多个瓜,个个都是大瓜!1、关晓彤鹿晗日本共度除夕夜,粉丝议论纷纷……蒋介石当年带走了多少故宫珍宝?台北故宫珍藏文物为你揭秘(上)台北故宫博物院又称中山博物院,位于台湾省台北市士林区至善路,总占地面积160000平方米,整座建筑仿北京故宫博物院的形式,采中国宫廷式设计,外观雄伟壮丽,背负青山,为中国三大博……春暖花开香约河北!野三坡开山节迎5万游客古乐悠扬,人潮涌动。4月8日上午,在国家非物质文化遗产涞水高洛古乐声中,河北野三坡景区以传统的祭山仪式拉开了第十六届开山节序幕,并以春暖花开香约河北为主题,向八方宾朋作出了这么……阴雨潮湿天5招做好健康防护多雨的日子,天气也变得阴冷潮湿,给人们的日常出行和身体带来了一系列影响,那么在这样的天气下有哪些应对之策呢?随时保持干燥0hr1hr在任何需要用到水的事情做完后,如……
美媒支招湖人2换3交易威少浓眉!一星四射重现彻底放飞詹皇2122赛季的湖人队聚齐了詹姆斯、戴维斯、威少三大巨星之后,更是招募来了安东尼、霍华德、阿里扎等一些成名许久的老将,我们期待着后巅峰期的詹皇还能够再夺一冠而后光荣退役。而往往是……1962年,刘思齐和杨茂之举行婚礼,毛主席亲送300元钱作为前言图邵华和刘思齐合影刘思齐是烈士刘谦初和张文秋的女儿,1930年出生于上海,1949年与毛泽东的长子毛岸英结婚,毛岸英牺牲12年后,1962年与杨茂之结婚。话剧《……简单两味药,用来泡水喝,能补肾益精,阴阳双补我们的人体随着年龄的增长,各项机能也会有所下降,也就容易产生种种问题,比如头晕乏力、腰膝酸软、腹胀腹泻,有的甚至还出现了增生、结节等。而这些问题的产生大都与我们的肾有关系……过年买猪肉,聪明人专挑这4个部位,都是精华!价格实惠口感好快过年了,大家都买点猪肉回家,留着腌制腊肉、灌制腊肠、包点饺子等等。家里老人说,过年的餐桌上是一定少不了一道肉菜的,但是你知道猪身上哪个部位的肉质口感好,价格还实惠吗?今天让我……天际线之下的流光30年,城市景观艺术家PaulKenton的以步行的方式探索一座城市,每走一步都能感受到它的脉搏。我时常会在一个与众不同的角度停下脚步,展开画布,并让自己沉浸于当下。每当这时,惊喜与黯然总会同时涌上心头,原来我始终无法捕……微软将用户数据传输至境外?确实如此吗?近期,一则消息在网络上不胫而走:中国用户在登录微软Office、Windows、Azure等产品账户时,会出现数据传输提醒:你的数据将在你所在国家或地区之外进行处理。随后……值得警惕的前夫哥影视剧中,前夫哥的形象是多元的,有的,还相当讨喜。《我的前半生》中,雷佳音饰演的林俊生就是一个让人恨不起来的前夫哥。他醉心事业,被吴越饰演的心机女凌玲利用,背叛家庭……孙子和外孙的差别到底有多大?听听老人们的回答,真实又扎心孙子和外孙子虽然只有一字之差,但差别还是不小的。如今女人生了孩子之后,大多都是奶奶帮忙带娃的,虽然儿媳之间相处起来很尴尬,但是奶奶带娃势必会比姥姥带娃更尽心尽力一些。……为啥一到凌晨34点就早醒?中医或许是身体这2处堵了俗话经常说:春困秋乏夏打盹儿,很多人在午后经常会出现犯困的情,但是到了晚上,又会饱受失眠的困扰。尤其是很多人到了凌晨的三、四点经常容易醒来,好像上了闹钟一样,一般醒来之后……如何将计划付诸行动?行动第一步可以这样做这一次,我又没有坚持下来。我已经放弃了,坚持实在太难了。每次计划做得热血沸腾,每次行动总是三分热度,每次结果总是放弃。你是不是也有这样的困惑,不禁在问:持续坚持一件……中国珍贵的核爆一九六四年十月十六日下午三时,新疆罗布泊上空,我国第一次将原子核裂变的巨大火球和罗布云升上了戈壁荒漠。中国第一颗原子弹试爆成功的消息震惊世界。原子弹的爆炸成功代表着中国科学技术……王敏彤婉容的表亲,痴恋溥仪一生,求爱遭拒,晚年因吃饺子送命王敏彤,原名完颜童记,她是末代皇后婉容的表亲,她出生于1913年,是名副其实的皇亲贵族。王敏彤人称王大姑娘,她人长得很漂亮,人称满清最美的格格,可惜这样一位可人儿却终身未……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网