【前端】面试题1~5

news/2024/5/6 16:46:47/文章来源:https://blog.csdn.net/m0_58190023/article/details/128180049

目录

一、说一说cookie、sessionStorage和localStorage 区别?

1、相同点

2、区别

二、说一说JS数据类型有哪些,区别是什么?

🍂 1、数据类型

🍂 2、数据类型区别

🍂 3、注意

🍂 4、总结

三、说一说你对闭包的理解?

四、说一说promise是什么与使用方法?

🤪Promise的作用

🤪Promise的使用

🤪Promise的特点

🤪Promise的其他方法:

五、说一说跨域是什么?如何解决跨域问题?


一、说一说cookie、sessionStorage和localStorage 区别?

1、相同点

🥰 Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储

2、区别

🐾 数据存储位置

  • cookie是由服务器端写入的
  • SessionStorage、 LocalStorage都是由前端写入的

🐾 生命周期

  • cookie的生命周期是由服务器端在写入的时候就设置好的
  • LocalStorage是写入就一直存在,除非手动清除
  • SessionStorage是页面关闭的时候就会自动清除

🐾 存储大小

  • cookie的存储空间比较小大概4KB
  • SessionStorage、 LocalStorage存储空间比较大,大概5M

🐾 写入方式

  • Cookie、SessionStorage、 LocalStorage数据共享都遵循同源原则
  • SessionStorage还限制必须是同一个页面

🐾 发送请求时是否携带

  • 在前端给后端发送请求的时候会自动携带Cookie中的数据
  • SessionStorage、 LocalStorage不会

🐾 应用场景

  • Cookie一般用于存储登录验证信息SessionID或者token
  • LocalStorage常用于存储不易变动的数据,减轻服务器的压力
  • SessionStorage可以用来检测用户是否是刷新进入页面,如音乐播放器恢复播放进度条的功能
  • 总结:数据存储位置、生命周期、存储大小、写入方式、数据共享、发送请求时是否携带、应用场景

二、说一说JS数据类型有哪些,区别是什么?

🍂 1、数据类型

  • 基本数据类型也叫简单数据类型,包含7种类型,分别是Number 、String、Boolean、BigInt、Symbol、Null、Undefined
  • 引用数据类型也叫复杂数据类型,通常用Object代表,普通对象,数组,正则,日期,Math数学函数都属于Object。

🍂 2、数据类型区别

  • 基本数据类型和引用数据类型它们在内存中的存储方式不同。
  • 基本数据类型是直接存储在栈内存中的简单数据段,占据空间小,属于被频繁使用的数据
  • 引用数据类型是存储在堆内存中,占据空间大。
  • 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会检索其在栈中的地址,取得地址后从堆中获得实体。

🍂 3、注意

  • Symbol是ES6新出的一种数据类型,这种数据类型的特点就是没有重复的数据,可以作为object的key
  • Symbol()的构造函数不够完整,所以不能使用new Symbol()创建数据。
  • Symbol()创建数据具有唯一性,所以 Symbol() !== Symbol(), 同时使用Symbol数据作为key,不能使用for获取到这个key,需要使用Object.getOwnPropertySymbols(obj)获得这个obj对象中key类型是Symbol的key值。
        let key = Symbol('key');let obj = { [key]: 'symbol' };// 返回一个数组[Symbol('key')]let keyArray = Object.getOwnPropertySymbols(obj); console.log(keyArray);obj[keyArray[0]] // 'symbol'console.log(obj[keyArray[0]]);

  • BigInt也是ES6新出的一种数据类型,这种数据类型的特点就是数据涵盖的范围大,能够解决超出普通数据类型范围报错的问题
  • 使用方法:整数末尾直接+n:647326483767797n; 调用BigInt()构造函数:BigInt("647326483767797")
  • 注意:BigInt和Number之间不能进行混合操作

🍂 4、总结

  • 基本数据类型:number、string、boolean、undefined、null、symbol、bigint
  •  引用数据类型:object(包括Array,Function、Object类等)
  • 区别:基本数据类型的存放在栈内存中,引用数据类型存放在堆内存中,它的地址在栈中,一般我们访问就是它的地址
  • Symbol唯一性, 不可枚举,使用getOwnPropertySymbols获取
  • bigint的特点是数据涵盖的范围比较大,可以用来表示数字类型不能表达的数据范围的数值。

三、说一说你对闭包的理解?

  1. 概念:函数内部的函数可以访问外部函数的变量称为闭包
  2. 一般就是一个函数A,return其内部的函数B,被return出去的B函数能够在外部访问A函数内部的变量,这时候就形成了一个B函数的变量背包,A函数执行结束后这个变量背包也不会被销毁,并且这个变量背包在A函数外部只能通过B函数访问。
  3. 闭包形成的原理:作用域链,当前作用域可以访问上级作用域中的变量
  4. 闭包解决的问题:能够让函数作用域中的变量在函数执行结束之后不被销毁,同时也能在函数外部可以访问函数内部的局部变量。
  5. 闭包带来的问题:由于垃圾回收器不会将闭包中变量销毁,于是就造成了内存泄露,内存泄露积累多了就容易导致内存溢出。
  6. 闭包的应用:能够模仿块级作用域,能够实现柯里化,在构造函数中定义特权方法、Vue中数据响应式Observer中使用闭包等。

🍀总结:

😇 1.函数内部的函数可以访问外部函数的变量称为闭包

😇 2.通过作用域链,当前作用域可以访问上级作用域中的变量

😇 3.解决的问题:保存变量,保护变量

😇 4.带来的问题:内存泄露

😇 5.块级作用域

  • 🍀变量背包、作用域链、局部变量不销毁、函数体外访问函数的内部变量、内存泄漏、内存溢出、形成块级作用域、柯里化、构造函数中定义特权方法、Vue中数据响应式Observer

四、说一说promise是什么与使用方法?

🤪Promise的作用

  • Promise是异步微任务,解决了异步多层嵌套回调的问题,让代码的可读性更高,更容易维护

🤪Promise的使用

  1. Promise是ES6提供的一个构造函数,可以使用Promise构造函数new一个实例
  2. Promise构造函数接收一个函数作为参数,这个函数有两个参数,分别是两个函数 resolve和reject
  3. resolve将Promise的状态由等待变为成功,将异步操作的结果作为参数传递过去
  4. reject则将状态由等待转变为失败,在异步操作失败时调用,将异步操作报出的错误作为参数传递过去。
  5. 实例创建完成后,可以使用then方法分别指定成功或失败的回调函数,也可以使用catch捕获失败,then和catch最终返回的也是一个Promise,所以可以链式调用。

🤪Promise的特点

1. 对象的状态不受外界影响(Promise对象代表一个异步操作,有三种状态)

  • pending  (执行中)
  • resolved (成功,又称Fulfilled)
  • rejected  (拒绝)
  • pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)

2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果

  • Promise对象的状态改变,只有两种可能(状态凝固了,就不会再变了,会一直保持这个结果)
  • 从Pending变为Resolved
  • 从Pending变为Rejected

3. resolve方法的参数是then中回调函数的参数,reject方法中的参数是catch中的参数

4. then方法和 catch方法只要不报错,返回的都是一个fullfilled状态的promise

🤪Promise的其他方法:

  • Promise.resolve() :返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。
  • Promise.reject():返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法。
  • Promise.all():返回一个新的promise对象,该promise对象在参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。
  • Promise.any():接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。
  • Promise.race():当参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
  • pendding、rejected、resolved、微任务、then、catch、Promise.resolve()、Promise.reject()、Promise.all() Promise.any()、Promise.race()

五、说一说跨域是什么?如何解决跨域问题?

😏 跨域

  • 当前页面中的某个接口请求的地址和当前页面的地址如果协议、域名、端口其中有一项不同,就说该接口跨域了。

😏 跨域限制的原因

  • 浏览器为了保证网页的安全,出的同源协议策略

😏 跨域报错信息

😏 跨域解决方案

1. cors

  • 目前最常用的一种解决办法,通过设置后端允许跨域实现。
  • res.setHeader('Access-Control-Allow-Origin', '*');
  • res.setHeader("Access-Control-Allow-Methods", "GET, PUT, OPTIONS, POST");

2. node中间件、nginx反向代理

  • 跨域限制的时候浏览器不能跨域访问服务器,node中间件和nginx反向代理,都是让请求发给代理服务器,静态页面面和代理服务器是同源的,然后代理服务器再向后端服务器发请求,服务器和服务器之间不存在同源限制。


3. JSONP

  • 利用的原理是script标签可以跨域请求资源,将回调函数作为参数拼接在url中。后端收到请求,调用该回调函数,并将数据作为参数返回去,注意设置响应头返回文档类型,应该设置成javascript。

4. postmessage

  • H5新增API,通过发送和接收API实现跨域通信。

😏跨域场景

  • 前后端分离式开发、调用第三方接口

总结:同源限制、协议、域名、端口、CORS、node中间件、JSONP、postmessage

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_230713.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业子网划分详解

一、IP协议 1、IP协议简介 IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务,也是Socket网络编程的基础之一。 IP协议特点: 无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是…

html+css鼠标悬停发光按钮![HTML鼠标悬停的代码]使用HTML + CSS实现鼠标悬停的一些奇幻效果!

源码如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> *{ /* 初始化 清除页面元素得内外边距 */ paddin…

Python开发6年,整理的《Python从入门到精通学习笔记》免费下载

前言 首先明确一点&#xff1a;为什么要学习python&#xff1f; 我说几个最主要的。 1.简单易学&#xff0c;入门友好 python其实就是英文句子&#xff0c;你只要能够认识基本的英文单词&#xff0c;你就可以非常熟练地使用python。 &#xff08;文末送读者福利&#xff09…

第二证券|沪指冲上3200点,中字头太火爆!

轿车整车概念股拉升&#xff0c;多要素共同刺激下&#xff0c;新能源车或将呈现一轮涨价潮。 今天早盘&#xff0c;三大股指走势分解&#xff0c;沪指拉升涨1.56%&#xff0c;站上3200点关口&#xff1b;创业板指则围绕平盘线展开震动&#xff0c;跌0.39%。 以稳妥股为首的大金…

微服务架构下的认证鉴权解决方案

背景 单体应用在向微服务化架构演进时&#xff0c;需要考虑如何解决服务认证授权的问题。如果处理不好&#xff0c;会引发架构的混乱&#xff0c;带来安全、性能、难以维护的问题。 以最典型的包含WEB页面的具备登录态管理的系统为例。在最初阶段&#xff0c;登录鉴权一般通过…

MySQL学习笔记(十三)count(*),count(id),count(1),count(字段)区别

count count 是MySQL的一个查询数量统计的函数&#xff0c;我们在平常的工作中经常会用到&#xff0c;count(*),count(id),count(1),count(字段)这4种写法有什么区别呢&#xff1f; //星号 select count(*) from user; //常数 select count(1) from user; //id(主键) select …

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

易基因课程回顾|表观遗传学和表观育种在品种改良中的应用研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 传统作物育种包括杂交、选择所需性状的遗传变异&#xff0c;导致遗传基础缩窄和遗传多样性缺失&#xff0c;从而阻碍作物改良。表型性状受遗传学和表观遗传学影响&#xff0c;利用表观遗传…

Java进阶架构师之如何画好架构图?阿里大神手把手教你!

1、什么是架构 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述&#xff0c;是一系列的决策。 架构是结构和愿景。 系统架构是概念的体现&#xff0c;是对物/信息的功能与形式元素之间的对应情况所做的分配&#xff0c;是对元素之间的关系以及元素同周边环境之间…

小程序webView页面转发后,进入页面空白

小程序webView页面&#xff0c;在点击右上角按钮分享后&#xff0c;进入分享的链接页面空白 重新进入页面后&#xff0c;页面空白。使用电脑打开之后报错提示如下 一、排查页面转发后&#xff0c;页面地址有没有解码 webview页面转发后&#xff0c;小程序会将url参数转码&…

莱特飞行优化及其使用场景

莱特飞行优化及其使用场景 一&#xff0c;莱特飞行 但是产生一个莱特飞行分布的随机数是比较难的&#xff0c;莱特只给出了一个积分&#xff0c;所以后面就有人提出了如何制造这样分布的随机数。 Mantegna 在1994年提出的一种用正态分布求解随机数的方法&#xff0c;有时也叫…

【多线程(三)】生产者和消费者模式

文章目录3.生产者和消费者模式前言3.1生产者和消费者模式概述3.2生产者和消费者案例3.3 阻塞队列基本使用3.4 阻塞队列实现等待唤醒机制总结3.生产者和消费者模式 前言 在线程世界里&#xff0c;生产者就是生产数据的线程&#xff0c;消费者就是消费数据的线程。在多线 程开发…

使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接

使用OpenCV的函数hconcat()、vconcat()实现图像或矩阵的连接 函数hconcat()在水平方向上连接图像或矩阵&#xff1b; 函数vconcat()在垂直方向上连接图像或矩阵。 两个函数的原型和使用方法一模一样&#xff0c;所以在下面的函数原型介绍中&#xff0c;只介绍函数hconcat()的…

人工智能:声纹相关基础概念介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

软件测试工程师涨薪攻略!3年如何达到30K!

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪&#xff0c;而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试&#xff0c;是希望能够日…

[附源码]计算机毕业设计设备运维平台出入库模块APPSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【数据结构】建堆的方式、堆排序以及TopK问题

建堆的方式、堆排序以及TopK问题1、建堆的两种方式1.1 向上调整建堆1.2 向下调整建堆2、堆排序3、TopK问题4、建堆、堆排序、TopK问题全部代码1、建堆的两种方式 我们知道&#xff0c;堆是二叉树的一种&#xff0c;二叉树的建立是借助结构体与数组完成的&#xff08;通过在结构…

Java IO流(详解)

1. File1. 创建2. 操作1. 获取文件信息2. 目录创建/删除2. IO流1. FileInputStream1. 简单使用2. 读取中文2. FileOutputStream1. 简单使用2. 追加写入3. 文件拷贝4. FileReader1. 简单使用2. 提高读取速度5. FileWriter1. 简单使用6. 节点流和处理流简介7. BufferedReader1. 简…

yolo后处理操作-如何获取我们想要的目标框及置信度?

yolo后处理就是模型的输出进行处理&#xff0c;得到我们想要的坐标框的xywhxywhxywh以及confidenceconfidenceconfidence 学习笔记 这是yolov1的模型&#xff0c;他将图像划分成了7x7个网格&#xff0c;每个网格负责预测两个边界框&#xff0c;每个边界框都有5个信息$x、y、w、…

腾讯云年终选购云服务器攻略!

随着云计算的快速发展&#xff0c;很多用户都选择上云&#xff0c;上运中最常见的产品就是云服务器CVM和轻量应用服务器了&#xff0c;那么怎么选购最优惠呢&#xff0c;这篇文章将介绍新老用户选购腾讯云服务器的几个优惠方法。 一、买赠专区 第一个介绍的就是买赠专区&…