【面试题】JS部分面试题

1.ES6的新特性:let const   for..of.. 遍历value    展开运算符...   箭头函数 

2.面向对象和面向过程的优点: 面向对象(容易维护,复用,扩展)面向过程(性能比面向对象高  类调用时需要实例化 开销大 耗资源)
面向对象:将问题中涉及到的对象分析出来,针对需要 让这些对象具有功能和属性       面向过程:将要解决的问题分解为若干个功能模块 按照顺序执行

3.js八种数据类型: undefined  null boolean number string object 
js的数据类型分类:基本数据类型  undefined null number boolean string    引用数据类型 object array function data等

4.数据类型检测方式有哪些: typeof  instanceof 

5.判断数组方式有哪些: obj.prototype.toString.call    原型链  es6 array.isArray  instanceof what

6.js作用域的理解 作用域:变量或者函数的有效作用范围,控制着变量和函数的可见性与生命周期     分为全局作用域和局部作用域 全局window下用var声明的  局部只能在函数内部使用

7.null和undefined区别:  null表示没有对象  即该处不应该有值  undefined 表示缺少值,没有定义    null 转换为number 数据类型是0  undefined是nan

8.闭包“函数中定义的局部函数 该局部函数在函数外部使用”  解决方案: 利用let块级作用域的特性第一个用途:创建私有变量,避免全局变量的污染    第二个用途:可以使用已经运行结束的函数中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收

9.递归:就是在运行的过程中调用自己

10.数组去重: indexOf、 利用es6的set   splice  哈希算法hash利用对象的key的唯一性

11.排序算法:冒泡排序 快速排序 选择排序

12.js设计模式有哪些 单列模式 工厂模式 观察者模式

工厂模式原理:用函数来封装创建对象的细节,从而通过调用函数来达到复用的目的。但是它有一个问题就是创建出来的对象无法和某个类型联系起来,它只是简单的封装了复用代码,而没有建立起对象和类型的关系 

13.原型:函数都带有一个prototype属性 这时属性指向构造函数的原型对象  获取原型方法: p.constructor.prototype

14.原型链 访问实例对象某个属性时候 会在对象本身属性上查找 找不到就会通过proto属性去原型上查找 如果还没有就在构造函数的原型proto中查找 这样一层一层向上查找就会形成一个作用域链叫原型链

15.new执行过程: 创建一个全新的对象  会被执行prototype连接  this指向新创建对象 通过new创建每个对象将最终被prototype连接到这个函数的prototype对象上 

16.call apply bind 三者区别   call和apply 在借用过程中不会产生新的对象  bind在借用过程中会生成新的对象

17.this指向  : this永远指向最后调用它的对象    全局作用域下this指向window,, 自执行函数 定时器 都指向window ,,构造函数指向当前实例 call apply bind 可以改变this 指向  

18.箭头函数与普通函数的区别(1)箭头函数比普通函数更加简洁  (2)箭头函数没有自己的this  (3)箭头函数继承来的this指向永远不会改变  call()、apply()、bind()等方法不能改变箭头函数中this的指向

19.DOM 
创建节点  document.createElement 元素名      Sttribute 属性名  textNode 文本内容
增删改查添加 addpendChile()    移出removeChile  替换replaceChile  插入insertBeform   查找
查找 document.getElementById()

20.DOM回流 重绘 
回流: 页面的元素的布局发生了变化,那么相关的页面的元素需要重新排列
重绘: 如果页面元素的样式发生了变化,页面就需要重新渲染

21.DOM事件:事件传播机制:先冒泡 - 目标阶段 - 捕获-利用事件冒泡进行事件委托 通过事件对象e 来判断点击的具体元素 

22.e.stopPropagetion来阻止冒泡  利用e.preventDefault来阻止事件默认
事件有DOM0级和DOM2级事件绑定

23.js异步编程:js是单线程 浏览器遇到setTimeout和setInterval会执行完当前的代码块,在此之前会把当定时器推入浏览器的待执行事件队列里面,等到浏览器执行完当前代码之后会看下事件队列有没有任务 有的话执行里面代码
常用方式 setTimeout setInterval ajax async 

24.宏任务和微任务执行顺序 :先执行微任务 在执行宏任务
宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)。
微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。(promise.then,proness.nextTick等等)。 3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。

25.三次握手和四次挥手:第一次 客户端向服务端发送syn码数据包  第二次 发送客户端请求后 发送ACK数据包给客户端  第三次握手  收到ACK码 验证是否正确
         四次挥手  第一次 客户端发送数据结束后 发送FIN码数据包给服务端  第二次 服务端收到FIN后 发送给ACK客户端  第三次挥手 当服务器端吧相应的数据发送完毕后 会发一个FIN给客户端   第四次 当客户端收到FIN后 发送一个ACK码给服务端 告诉服务端 数据发送完毕了

26.http常用状态   200 成功 204 请求成功   404  客户端错误 500 服务端内部错误

27.https和http 区别主要如下http 是超文本传输协议  https则具有安全性的ss加密传输协议   http和https是使用的是完全不同的连接方法 端口也不一样 前者是80 后者是443
https解决三个安全问题 内容隐私 防止篡改 确认对象身份

28.浏览器缓存 : 强缓存和若缓存 强缓存 不会像服务器发送请求 直接从缓存中读取资源  若缓存强制缓存失效后 留恋其携带缓存表示向服务器发送请求

29.ajax四部:创建XHR对象  (异步调用对象)     配置xhr对象     使用xhr对象 发送请求   给xhr对象 注册绑定事件 回调函数 并处理服务器的响应数据
30.使用过那些ajax   从原生XHR的到jquery ajax 再到现在asiox 

31.拦截路由中都会写什么代码?  一半会把token写里面 就不用每次请求都写参数  还做数据格式处理  

32.get请求和post请求区别  什么时候使用post?  get用于信息获取 用Url传参 post用于修改服务器资源 对所发送信息没有限制  

33.什么时候使用post?: 无法使用缓存文件  向服务器发送大量数据  发送包含位置字符用户输入时 post比get更稳定可靠

34.cookie 可设置长时间保持  session 一般失效时间较短   临时存储的  localstror  本地存储

35.token ? 客服端使用用户名跟密码请求登录   服务器收到请求 去验证用户与密码  验证成功 后 服务端会签发一个token并把这个token发送给客户端  客户端收到token后 会把他存储起来 比如本地存储里面  服务端收到请求 然后去验证客户端请求token 验证成功 返回数据

36.同源策略? 协议 域名 端口号相同 
解决跨域: jsonp原理     反向代理    cors(后端)

37.防抖和节流:::   防抖  触发高频事件后n秒内函数只会执行一次  如果n秒内高频时间再次触发 则重新计算事件  实现方式  每次触发事件设置一个延迟调用方法 并且取消之前延迟调用方法
节流 :: 高频事件触发  但在n秒内只会执行一次  所以节流会稀释函数的执行频次  实现方法: 每次触发事件 如果有等待执行的延迟函数 就直接return   
二者区别:抖动是将多次执行变为最后一次执行   节流是将多次执行变为每隔一次执行

38.深拷贝 将内部数据用递归方式拷贝  浅拷贝 将对象内部数据完全一致拷贝 用for循环    对象内部有一个动态数组,浅拷贝只拷贝指针,而深拷贝可以重新申请空间并将数据复制过来

浅拷贝:使用Object.assign 之拷贝地址,它是将数据中的所有数据引用下来,只想同一个存放地址,考背后的数据修改后,会影响到原来数据中的对象数据

深拷贝:使用JSON.parse(JSON.Stringify(...)),递归拷贝每一层对象,是内容拷贝,将数据中的所有数据都拷贝下来,对拷贝后的数据进行修改,不影响原来的数据。。可以使用for.in  扩展运算符 递归等递归函数来实现深拷贝。。递归就是一个函数调用本身(自己调自己),通过栈来实现,每执行一个函数,就新建一个函数栈

39.“Axios是一个基于promise的可用在浏览器和node.js中的异步通信框架;主要作用是实现AJAX异步通信。因为vue的边界很明确,就是为了处理DOM,所以并不具备通信功能,此时就需要额外使用axios通信框架与服务器交互

40事件冒泡:事件从最内层的元素开始发生,一直向上传播 知道document对象  addeventListenter("click",function(el){})
事件铺货:与事件冒泡相反,事件会从外层开始发送,只到最具体的元素

41.任意浏览器字体高都是16px 1em=16px 10px=0.625em 所以 font-size=62.5%

42.哪些操作会造成内存泄露???  意外的全局变量;被遗忘的计时器或者回调函数;脱离DOM的引用;闭包; 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值