前端面试题集锦(3)

news/2025/2/21 8:13:18/

目录

1、解释一下什么是闭包 ?

2、解释一下原型和原型链 ?

3、说一下 ES6 中你熟悉的一些内容 ?

4、数组排序的方式 ?

5、什么是事件轮询(EventLoop) ?

6、数组的一些API, 哪些能够改变原数组, 那些不能 ?

7、for 循环与 forEach 的区别 ?

8、url 的组成 ?

9、Promise 的使用场景 ?

10、let, const, var 的区别 ?


1、解释一下什么是闭包 ?

🍉 闭包:就是能够读取外层函数内部变量的函数。
🍉 闭包需要满足三个条件:
             访问所在作用域;
             函数嵌套;
             在所在作用域外被调用 。
🍉 优点:
             可以重复使用变量,并且不会造成变量污染 。
🍉 缺点:
             会引起内存泄漏
🍉 使用闭包的注意点:
             由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象 (object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性 (private value),这时一定要小心,不要随便改变父函数内部变量的值。

2、解释一下原型和原型链 ?

🍉 原型
原型就是一个为对象实例定义了一些公共属性和公共方法的对象模板。
🍉 原型链
             对象之间的继承关系通过构造函数的prototype指向父类对象,直到指向Object对象为止形成的指向链条。
             通俗讲: 原型链是原型对象创建过程的历史记录。
🍉 注:在javascript中,所有的对象都拥有一个__proto__属性指向该对象的原型(prototype) 。

3、说一下 ES6 中你熟悉的一些内容 ?

🍉 class 类的继承ES6中不再像ES5一样使用原型链实现继承,而是引入Class这个概念
🍉 async、await使用 async/await, 搭配promise,可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成
🍉 Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理、强大
🍉 Symbol是一种基本类型。Symbol 通过调用symbol函数产生,它接收一个可选的名字参数,该函数返回的symbol是唯一的
🍉 Proxy代理使用代理(Proxy)监听对象的操作,然后可以做一些相应事情
🍉 Set是类似于数组的数据集合,无序,插入删除速度快,元素不重复,查找速度快。
🍉 Map是一个类似对象的数据结构,和对象不同的在于它的key可以是任意类型,但是对象只能使用string和symbol类型,Map的存储关联性更强
🍉生成器函数可以进行阻断函数执行的过程,通过传参可以传入新的值进入函数继续执行,可以用于将异步变为阻塞式同步

4、数组排序的方式 ?

🍉 冒泡排序:

<script>for(var i=0;i<arr.length-1;i++){for(var j=0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){var temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}if(arr[j]===arr[j-1]) i++;}
</script>

🍉 选择排序:

<script>for(var i=0;i<arr.length;i++){var min=i;for(var j=i+1;j<arr.length;j++){if(arr[j]<arr[min]) min=j;}if(min!==i){var temp=arr[i];arr[i]=arr[min];arr[min]=temp;}if(arr[i]===arr[i+1])i++;}
</script>

🍉 快速排序:

<script>function quickSort(arr) {if (arr.length <= 1) return arr;var centerIndex = ~~(arr.length / 2);var left = [];var right = [];for (var i = 0; i < arr.length; i++) {if (i === centerIndex) continue;if (arr[i] < arr[centerIndex]) left.push(arr[i]);else right.push(arr[i]);}return quickSort(left).concat(arr[centerIndex], quickSort(right));}
</script>

5、什么是事件轮询(EventLoop) ?

🍉 一个用来等待和发送消息和事件的程序结构。
       1、所有任务都在主线程上执行,形成一个执行栈。
       2、主线程发现有异步任务,如果是微任务就把他放到微任务的消息队列里,如果是宏任务就把他放到宏任务的消息队列里。
       3、执行栈所有同步任务执行完毕。
       4、执行微任务队列,之后再执行宏任务队列。
       5、轮询第4步。

6、数组的一些API, 哪些能够改变原数组, 那些不能 ?

🍉 改变原数组的方法:

shift()
unshift()
pop()
push()
reverse()
sort()
splice()

🍉 不改变原数组的方法:

concat()
every()
filter()
forEach()
indexOf()
join()
lastIndexOf()
map()
some()
every()
slice()
reduce()
reduceRight()
flat()
flatMap()
find()

7for 循环与 forEach 的区别 ?

1.for循环可以使用break跳出循环,但forEach不能。
2.for循环可以控制循环起点(i初始化的数字决定循环的起点),forEach只能默认从索引0开始。
3.for循环过程中支持修改索引(修改 i),但forEach做不到(底层控制index自增,无法左右它)。

8、url 的组成 ?

http:/https: 协议
www.baidu.com 域名
:8080 端口
/sf/vsearch 路径
?wd=百度热搜 查询(可有可无)
#a=1&b=2 哈希值(可有可无)

9Promise 的使用场景 ?

🍉 场景1:获取文件信息
🍉 场景2:配合AJAX获取信息
🍉 场景3:解决回调地狱,实现串行任务队列
🍉 场景4: node中进行本地操作的异步过程

10let, const, var 的区别 ?

声明方式   变量提升   暂时性死区   重复声明   初始值   作用域
var                允许          不存在          允许       不需要   非块级
let                不允许          存在          不允许     不需要     块级
const           不允许          存在          不允许       需要       块级

http://www.ppmy.cn/news/841.html

相关文章

谁在抢夺千亿老酒

一个中老年男人&#xff0c;推着一辆三轮车&#xff0c;上面放着“高价回收老酒”的纸牌子——这就是老酒民间交易的一个缩影。 这个看似简陋的买卖背后&#xff0c;蕴藏着巨大的市场。 相关数据显示&#xff0c;我国老酒市场规模已破千亿。老酒收藏爱好者、专门的运营机构以…

Postman之Newman命令行运行脚本生成HTML报告

目录 一、Newman的下载安装 二、Newman生成Html报告 三、执行脚本准备 3.1.导出项目集脚本 3.2.导出环境变量 3.3.导出全局变量 3.4.data数据驱动文件 3.5.文件存储 四、Newman运行命令简介 4.1.运行命令&#xff1a;newman run 4.2.常用参数&#xff1a; 4.3.执行…

谷粒学苑_第十一天

要开始做前台部分(用户环境) 之前我们用的后台前端框架是vue-admin-template 这次的前台框架是用的NUXT 轮播图实现 显示课程和老师 redis缓存 NUXT 服务端渲染技术 解压guli_site 在这里我们使用的是成品,页面也基本写好 然后下载依赖: 开始运行: npm rum dev后面…

yolov5量化注意事项(二)

一、引言 前面的博文&#xff0c;是PTQ的注意事项。本篇文章是记录QAT部分需要修改的一些要点。 注&#xff1a;本文仅供自己的笔记作用&#xff0c;防止未来自己忘记一些坑的处理方式 QAT的大致流程&#xff1a;&#xff08;1&#xff09;训练生成基础模型&#xff0c;通常是…

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F407----目录 LAN8720A数据手册(中文英文)----点击下载 STM32F407-ETHLAN8720ALWIP-无操作系统-ping通----程序源码-点击下载 前言 本次实验以 STM32F407VET6 芯片为MCU&#xff0c;使用 25MHz 外部时钟源…

在linux系统上看全世界新闻 -- Clinews的使用详解

一. Clinews介绍 Clinews 和 InstantNews 类似&#xff0c;都是 Linux 命令行下的新闻客户端&#xff0c;安装及配置 Clinews 后就可以在 Linux 命令行下阅读新闻及头条新闻了&#xff0c; 当然还有博客新闻&#xff0c;不需要安装 GUI 应用或移动应用&#xff0c;轻松在 Linu…

STM32实战总结:HAL之IAP

我们学习单片机一般都是从51开始的&#xff0c;51单片机烧录程序通常是使用烧录软件如STC-ISP。这种方式&#xff0c;通过串口连接单片机&#xff0c;选择一个合适的波特率就可以烧录了。 后来学习STM32&#xff0c;编程时使用KEIL软件自带的下载按钮就能下载程序&#xff0c;方…

神仙级编程神器,吹爆

Visual Studio 编程领域公认的“最强IDE”&#xff0c;Visual Studio是目前最流行的Windows平台应用程序的集成开发环境&#xff0c;提供了高级开发工具、调试功能、数据库功能和创新功能&#xff0c;帮助在各种平台上快速创建当前最先进的应用程序&#xff0c;开发新的程序。 …