面试之JS篇

1:数据类型 以及存储上面的差别

6种基本数据类型 Number/String/Boolean/null/undefined/symbol

引用类型 Object/Array/Function 以及Map Set等等

基本数据类型存储在栈中,引用类型存储在堆里面

基本数据类型赋值 分别指向不同的地址 引用类型赋值指向同一引用地址

2:数据类型判断的方法

typeof---只能判断基本数据类型

instanceof---只能判断引用类型

constructor---不能判断null和undefined类型,并且可能会被修改

object.prototype.toString.call()--可以判断所有类型

3:深拷贝和浅拷贝的区别

浅拷贝的实现  hasOwnProperty浅拷贝的一些方法 Object.assign  Array.prototype.slice() Array.prototype.contact() 拓展运算符的应用

深拷贝的实现 循环递归 lodash里面的_.deepclone Jquery.exend JSON.stringfy()

浅拷贝和深拷贝都是创建了一个新的对象,但是复制对象属性的行为不一样,浅拷贝是复制属性指向某个对象的指针,它们共享一个内存 深拷贝创造另一个一模一样的对象 不共享内存

 4:闭包的理解和闭包使用场景

闭包的理解:简单来说就是,函数被引用包围 这个引用就是函数周围的词法环境的引用 JS里面,一个函数被创建的同时,闭包也被创建出来了 闭包可以让内层函数访问到外层函数的作用域

使用场景:创建私有变量,延迟变量的生命周期 因为闭包函数被返回时它的词法环境不会被销毁----柯里化函数等

5:作用域和作用域链的理解

作用域是变量和函数可以访问的区域 全局 函数 块级 词法(变量被创建时就被确定好了 静态作用域)

作用域链 当前作用域 沿着词法作用域一层一层 知道全局作用域

6:原型和原型链

原型:搜索一个对象的属性可以在对象的原型上查找

原型链:原型对象也有原型 这样一层一层就构成了原型链,如果在对象原型上找不到属性会沿着原型链查找 原型链都是通过_proto_相连

对象的_proto_都是指向构造该对象函数的prototype

7:this

普通函数 new 关键字>显示绑定(bind,call,apply)>隐式绑定>默认绑定(window)

箭头函数

8:执行上下文和执行栈

 执行上下文-全局上下文 函数上下文

生命周期:

创建:词法环境(全局,函数) 变量环境(变量声明了但是为赋值 此时为undefined)

执行:代码执行 变量赋值

回收:函数返回后 除闭包外词法环境会被回收

执行栈---后进先出 用来存储执行上下文

9:事件循环

js是单线程 所以事件执行又顺序的 先执行队列中 的同步任务 再执行异步任务 而异步任务又分为宏任务和微任务 会先执行队列中所以的微任务(.then process.nexttick) 再执行宏任务(setTimeout/setInterval,setimmediate)

async函数 返回Promise await await 后面会返回一个Promise await会阻塞它后面的代码 把后面的会放在微任务中

10:DOM BOM

DOM文档对象模型 添加 查找 修改 删除 节点

BOM浏览器对象模型---提供内容和浏览器交互的对象

常见的BOM对象---window location navigator history screen

11:JS本地存储

sessionStorage:页面关闭 存储会被清除

localStorage:永久储存

cookie:根据过期时间判断

12:Promise

js解决异步编程的一直方案,应用于网络请求等场景

三种转态 pending fulfilled rejected  

.then方法返回一个Promise对象

promise的手写实现

13:防抖和节流

都是js提升性能的方案

防抖:n秒之后执行某个事件,若在n秒内事件被重复触发,重新计时

节流:固定频率只执行一次事件,重复触发无效

防抖简单手写:定时器

节流简单手写:时间

 

posted @   沁霓  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示