前端面试题分享

本文详细梳理了前端面试中常见的知识点,包括移动端适配、this、改变this指向的方法、箭头函数特性、原型对象与原型链、本地存储、闭包、递归、内存泄漏与垃圾回收机制、深拷贝与浅拷贝的区别、let const var 区别、回流重绘、防抖节流策略、HTTP状态码、事件轮询、宏任务与微任务、GET与POST请求的区别、前端登录流程、跨域解决方案、数组与对象的方法等。全面覆盖前端面试核心要点,帮助开发者准备面试。
摘要由CSDN通过智能技术生成

常见的面试题

移动端如何适配

  • 视口标签(布局视口 等于 视距视口 达到 理想视口的状态)

  • 2倍图 3倍图(移动端设备分辨率高,像素点小)

  • 单位使用rem

  • 移动端使用媒体查询 设置 屏幕下的html标签的font-size

2.什么是this

this 是函数执行时上下文,是函数执行时所在环境,

this总是指向一个对象,根据函数的调用方式不同this指向不同的对象

  • 当函数以普通函数调用的时候 ,this指向 window

  • 当函数以对象中的方法的形式调用的时候,this指向 调用它的对象

  • 定时器回调函数内的this 指向window

  • 多层this嵌套 内层的this指向window (内层想用外层的this 可以在外层 声明一个变量 绑定一下外层的this)

  • 数组方法的回调函数内的this 指向window

  • 事件处理函数内的this 指向事件源

  • 箭头函数内 没有自己的this,他使用的是外层作用域的this

  • 构造函数内的this 指向 创建出的实例对象

3.改变this指向的方式

  • 函数.call(this绑定的对象,参数1,参数2...)

    • 作用:改变this指向 可以立即调用 一个一个的传参

  • 函数.apply(this绑定的对象,[参数1,参数2])

    • 作用:改变this指向,立即调用函数,以数组的形式给函数传参

  • 函数.bind(this绑定的对象,参数1,参数2...)

    • 作用:改变this指向,不会立即调用函数,返回一个改变this指向后的函数,给函数一个一个的传参

4.箭头函数与普通函数的区别

  • 箭头函数没有自己的this
  • call()、apply()、bind()等方法不能改变箭头函数中this的指向
  • 箭头函数不能作为构造函数使用
  • 箭头函数没有自己的arguments
  • 箭头函数没有原型对象,不能作为构造器去创建实例对象
  • 箭头函数㕯只有一条语句的时候 可以省略{},自动的返回这一条语句作为函数的返回值

  • 箭头函数一个参数的时候,可以省略小括号

  • 箭头函数是对匿名函数的简写,所有使用匿名函数的地方都可以简写为箭头函数

5.什么是原型对象

原型对象是JavaScript中的特殊对象,用于实现继承和属性共享。每个对象都有一个原型对象,通过原型链可以访问原型对象的属性和方法。原型对象可以作为其他对象的模板,新对象会从原型对象继承属性和方法。通过原型的机制,可以用更少的内存来存储和共享方法和属性

6 什么是原型链

原型链是一种从对象到原型对象再到更高级原型对象的链接机制,使得对象可以沿着原型链继承和访问属性和方法。这种机制实现了JavaScript中的对象继承特性。

7.本地存储都有什么 及区别 (时效性,大小)

localstorage 永久性存储 5M 只能前端操作

sessionStroage 临时性存储 ,关闭浏览器就没有 5M 只能前端操作

cookie 可以设置过期时间,过期自动删除 4kb 前后端都可以操作,cookie在发送请求的时候会自动携带

8.什么闭包

闭包就是能够用读取其他函数内部变量的函数,由于在js中,只有函数内部的子函数才能读取内部变量,因此可以将闭包理解成定义在函数内部的函数

闭包(closure)是指函数与其所在的词法环境的组合。换句话说,闭包是一个函数以及它周围的状态(即捕获的变量)的包裹。

在JavaScript中,当一个函数内部定义了其他函数,并且内部函数引用了外部函数的变量,就形成了一个闭包。通过闭包,内部函数可以访问外部函数的变量,即使外部函数已经执行完毕,而且外部函数的变量在内存中也不会被释放。

闭包的特点包括:

  1. 内部函数可以访问到外部函数的变量,即使在外部函数已结束执行后仍然有效。

  2. 外部函数的变量在内存中不会被释放,因为内部函数依赖于这些变量。

闭包在JavaScript中有广泛的用途,常见的包括:

  1. 封装私有变量:通过闭包可以模拟实现私有变量和方法,隐藏内部实现细节,只暴露需要的接口。

  2. 延长变量的生命周期:某些场景中,我们需要延长变量的生命周期,使其在特定的时间段内持久存在,可以利用闭包实现这一需求。

  3. 保持函数的状态:闭包可以用于保持函数的状态,可以在多次调用同一个函数时,保持其中的某些变量的状态。

  4. 实现函数记忆化:使用闭包可以实现函数记忆化(Memoization),即缓存函数的计算结果,提高函数执行效率。

需要注意的是,使用闭包时要注意内存的管理,避免引发内存泄漏问题,及时释放不需要的闭包。

9.什么是递归

递归是一种通过函数调用自身的方法来解决问题的技术。它将一个复杂的问题分解为更小的相似子问题,直到达到基本情况并返回结果

10.什么是、内存泄漏

内存泄漏指的是在程序中,已经不再使用的内存不能被正常释放或回收的情况。当发生内存泄漏时,程序会持续占用内存,导致可用内存逐渐减少,最终可能引起系统的性能下降、程序崩溃或死机。

内存泄漏常见的原因包括:

  1. 动态内存分配后未释放:在使用堆内存进行动态分配(如malloc、new等)后,没有相应的释放操作(如free、delete等)。

  2. 循环引用:当两个或多个对象相互引用,并且没有被其他对象引用时,这些对象就形成了循环引用。即使这些对象已经不再被程序使用,垃圾回收机制也无法将它们释放,导致内存泄漏。

  3. 未关闭的资源:例如文件、数据库连接、网络连接等,如果打开了资源却不及时关闭࿰

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值