常见的面试题
移动端如何适配
-
视口标签(布局视口 等于 视距视口 达到 理想视口的状态)
-
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中,当一个函数内部定义了其他函数,并且内部函数引用了外部函数的变量,就形成了一个闭包。通过闭包,内部函数可以访问外部函数的变量,即使外部函数已经执行完毕,而且外部函数的变量在内存中也不会被释放。
闭包的特点包括:
-
内部函数可以访问到外部函数的变量,即使在外部函数已结束执行后仍然有效。
-
外部函数的变量在内存中不会被释放,因为内部函数依赖于这些变量。
闭包在JavaScript中有广泛的用途,常见的包括:
-
封装私有变量:通过闭包可以模拟实现私有变量和方法,隐藏内部实现细节,只暴露需要的接口。
-
延长变量的生命周期:某些场景中,我们需要延长变量的生命周期,使其在特定的时间段内持久存在,可以利用闭包实现这一需求。
-
保持函数的状态:闭包可以用于保持函数的状态,可以在多次调用同一个函数时,保持其中的某些变量的状态。
-
实现函数记忆化:使用闭包可以实现函数记忆化(Memoization),即缓存函数的计算结果,提高函数执行效率。
需要注意的是,使用闭包时要注意内存的管理,避免引发内存泄漏问题,及时释放不需要的闭包。
9.什么是递归
递归是一种通过函数调用自身的方法来解决问题的技术。它将一个复杂的问题分解为更小的相似子问题,直到达到基本情况并返回结果
10.什么是、内存泄漏
内存泄漏指的是在程序中,已经不再使用的内存不能被正常释放或回收的情况。当发生内存泄漏时,程序会持续占用内存,导致可用内存逐渐减少,最终可能引起系统的性能下降、程序崩溃或死机。
内存泄漏常见的原因包括:
-
动态内存分配后未释放:在使用堆内存进行动态分配(如malloc、new等)后,没有相应的释放操作(如free、delete等)。
-
循环引用:当两个或多个对象相互引用,并且没有被其他对象引用时,这些对象就形成了循环引用。即使这些对象已经不再被程序使用,垃圾回收机制也无法将它们释放,导致内存泄漏。
-
未关闭的资源:例如文件、数据库连接、网络连接等,如果打开了资源却不及时关闭