摘要:上面代码是一个阶乘函数,计算n的阶乘,最多需要保存n个调用记录,复杂度 O(n) 。 如果改写成尾递归,只保留一个调用记录,复杂度 O(1) 。 尾递归 函数调用自身,称为递归。如果尾调用自身,就称为尾递归。 递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack 阅读全文
posted @ 2019-07-24 01:55 秋野春上飞 阅读(268) 评论(0) 推荐(0) 编辑
摘要:考察对new关键的深刻认识,是否对前端知识有专研,如果没有专研的人,肯定说创建了一个对象,恭喜你面试官知道你是小菜鸟来的,这次面试基本上没有太大的希望了。一定要对new过程的4个步骤非常清楚,这样才能深深地抓住面试官的心! new共经过了4几个阶段 1、创建一个空对象 2、设置原型链 3、让Func 阅读全文
posted @ 2019-07-22 22:30 秋野春上飞 阅读(911) 评论(0) 推荐(0) 编辑
摘要:1、可以将token存储在 localstorage里面,在一个统一的地方复写请求头,让每次请求都在header中带上这个token, 当token失效的时候,后端肯定会返回401,这个时候在你可以在前端代码中操作返回登陆页面,清除localstorage中的token就好。 2、Storage的l 阅读全文
posted @ 2019-07-22 19:25 秋野春上飞 阅读(1332) 评论(0) 推荐(0) 编辑
摘要:有一道经典的字符串处理的问题,统计一个字符串中每个字符出现的次数。 用es6的Array.reduce()函数配合“...”扩展符号可以更方便的处理该问题。 结果: 阅读全文
posted @ 2019-07-21 22:37 秋野春上飞 阅读(1729) 评论(0) 推荐(0) 编辑
摘要:基本原则如下: 数组的元素是按次序排列的,变量的取值由它的位置决定; 对象的属性没有次序,变量必须与属性同名,才能取到正确的值。 数组的解构赋值: 对象的解构赋值: 但是对象的解构赋值,允许给赋值的变量重命名。 变量的解构赋值用途很多。 (1)交换变量的值 写法不仅简洁,而且易读,语义非常清晰 (2 阅读全文
posted @ 2019-07-21 22:11 秋野春上飞 阅读(3518) 评论(0) 推荐(0) 编辑
摘要:众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别。 hash模式 hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: 上面的代码可以通过改变hash来改变页面字体颜色,虽然没什么用,但是一定程度上说明了原理。 阅读全文
posted @ 2019-07-21 18:33 秋野春上飞 阅读(5412) 评论(0) 推荐(1) 编辑
摘要:1、首先看一个判断题:null和undefined 是否相等 console.log(null==undefined)//true console.log(null undefined)//false 观察可以发现:null和undefined 两者相等,但是当两者做全等比较时,两者又不等。 原因: 阅读全文
posted @ 2019-07-20 15:26 秋野春上飞 阅读(5342) 评论(0) 推荐(1) 编辑
摘要: 阅读全文
posted @ 2019-07-10 23:25 秋野春上飞 阅读(117) 评论(0) 推荐(0) 编辑
摘要:(1) 属性拷贝 就是将成员复制一份给需要继承的对象 存在问题: (2) 原型式继承 问题: (3) 原型链继承 问题: (4) 借用构造函数 (5) 组合继承 (6) 借用构造函数 + 深拷贝 阅读全文
posted @ 2019-07-10 02:40 秋野春上飞 阅读(239) 评论(1) 推荐(0) 编辑
摘要:在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。 和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,**以及对象变量的指针,这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。 阅读全文
posted @ 2019-07-10 02:26 秋野春上飞 阅读(1124) 评论(0) 推荐(0) 编辑