面试题JS(2022-02)

本文涵盖了前端开发中的CORS跨域解决方案、防抖与节流技术,以及内存泄漏和闭包的影响。同时讨论了JavaScript中的垃圾回收机制和常见内存优化策略。此外,还介绍了Ajax与Axios的区别,以及如何设置Axios拦截器。文章还涉及变量声明的var、let、const差异,基础数据类型和异步事件处理。最后,简述了HTTP与HTTPS的区别以及HTTP状态码和页面优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前端跨域CORS

所有的网站跨域资源共享是一种机制, 为了保障浏览器的安全。

同源策略: 协议, 域名, 端口 三者必须统一

解决方法: 

  • 后端加请求头: Access-Control-Allow-Origin:*
  • 前端使用JSONP非官方跨域解决方案
  • 使用代理模式(nodejs)
  • 挂载服务器(nginx)

2.防抖和节流

防抖: 是短时间内多次触发同一个函数, 只执行最后一次或开始是执行

节流: 在一段时间内只允许函数执行一次, 可通过时间戳和定时器实现(输入框的联想)


3. JS常见内存泄漏

意外的全部变量; 被遗忘的计时器; 脱离DOM的引用; 闭包


4. 闭包

闭包是在函数里面声明函数, 使子函数可以访问父函数中所有的局部变量, 保护变量不收外界污染, 使其一直存在内存中, 因为闭包太消耗内存, 尽量不适用, 优点是能够实现封装和缓存。


5. 垃圾回收和内存泄漏

垃圾回收机制: 标记清除和引用计数清除

将内存中不再用到的内存及时释放, 避免内存泄漏。

内存泄漏优化: 全局变量先声明再使用; 避免过多使用闭包; 注意清除定时器和监听。


6. 三种缓存

cookie的大小在4-5K左右, cookie数据会自动传递到服务器, 服务端也可以写cookie到客户端, 另外两种缓存不会自动传递数据到服务器, 且cookie在设置的时间内会一直有效。

localstorage虽然也有大小限制 但是比cookie大, 在浏览器关闭之后数据也不会丢失。

sessionstorage的大小可以达到5M或更大, cookie是因session而产生的缓存机制, 所以在sessionstorage在浏览器关闭之后自动删除。


7. 回调函数是什么

回调函数是通过函数的指针调用函数, 缺点是容易造成回调地狱, 所以可以通过观察者模式, promise或async/await去处理这个问题。


8. 字符串常用方法

concat(合并); indexOf();   slice(剪切);  replace(); split();   

toLowerCase(改大写);  toUpperCase(改小写)


9. Axios和Ajax

Axios可以从浏览器中创建XMLHttpRequest, 可以有nodejs创建HTTP请求, 支持promiseAPI拦截请求和响应, 可以转换拦截请求和响应数据, 取消请求,自动转换成JSON格式, 发送参数prams是跟请求地址一起发送, data是作为一个请求体进行发送, 客户端支持防止XSRF。

Ajax是与服务器进行数据交互的一种技术, 能够实现同步或异步的局部刷新; 先创建ajax核心对象; 在准备参数; 监听请求状态; 最后发送请求,接受结果。


10.Axios怎么设置拦截器

先请求拦截器: 请求前传入token之类的参数, 请求成功操作, 请求错误操作

再响应拦截器: 接收前跳转登录注册界面, 响应成功操作, 响应失败操作


11. var, let, const的区别

var没有块级作用域, 支持变量提升, 声明之后会挂载到window上面。

let有块级作用域, 不支持变量提升, 声明之后不会挂载到window上面, 不允许重复声明同一个变量, 有临时性死去。

const声明常量, 不支持变量提升,不允许重复声明, 一旦声明类型就不会被改变。


12. JS中基础数据类型

栈: String(); Number(); Boolean(); Object(); undefined(); null()

堆: 对象, 数组, 函数


13: JSON和JSONP

JSON是一种轻量级的数据格式, 他可以跨平台, 还可以做配置文件。

JSONP是一种非官方的解决跨域问题的方法, 是利用带有src属性的标签不受限制的访问外部资源, 并结合回调函数获取数据。


14.JS严格模式ES5

  • 不可以省略var声明变量;
  • 禁止使用八进制
  • 禁止使用this关键字指向全局变量
  • 不允许在非函数的代码内声明函数
  • 严格模式下的argument变量形参不会变

15. 同步异步

浏览器是多线程, 而js是单线程, 只能从下往上执行, 同步会在页面中造成阻塞, 执行完一个才能执行下一个; 异步可以解决并发, 多个任务一起执行, 无需等待结果。


16. 高阶函数

map(); redule(); filter('过滤'); sort();


17. 浏览器渲染过程

  • HTML先生成DOM树
  • 计算所有的节点位置
  • 内容呈现

18. 常见的异步事件

  • 定时器
  • ajax
  • 事件绑定
  • 回调函数
  • promise

19. 页面优化的方法

  • 减少请求
  • 合理设置HTTP缓存
  • 资源合并与压缩
  • 合并图片, 懒加载
  • 减少闭包
  • 使用字体图标或svg
  • 减少DOM操作
  • 避免死循环
  • 多事件委托

20. http和https的区别

http是超文本传输协议,信息是明文传输,端口默认是80, http连接是简单且无状态的

https则具安全性的ssl/tls加密传输协议, 端口默认是443, https是由SSL/TLS+HTTP协议构建的网络协议,可用于加密传输和身份认证, 比http协议更安全。


21. 常见HTTP的状态码有哪些

  • 200 – 请求成功
  • 301 – 资源(网页等)被永久转移到其它URL
  • 404 – 请求的资源不存在
  • 405 – 不允许的请求方法
  • 500 – 内部服务器错误
  • 501 – 服务器不支持请求方法
  • 503 – 服务器临时错误

22. HTTP的优缺点

优点: 支持客户/服务器模式; 应用广泛且跨平台; 简单快速、灵活

缺点: 无连接;无状态; 明文传输; 不安全


注释: 如有不对的, 欢迎补充和指出,我也是一边面试一边收集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

molanyouming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值