前端面试题集锦(4)
创始人
2024-03-13 04:27:32
0

目录

1、对 this 的理解, 三种改变 this 的方式 ?

2、cookie, localStorage,sessionStorage 的区别 ?

3、原生 ajax 的流程 ?  

4、如何实现继承 ?

5、函数的节流和防抖是什么 ?

6、什么是 Promise 以及promise的作用 ?

7、Promsie 和 async/await 的区别和使用 ?

8、对于数组去重你有哪些办法 ?

9、如何实现数组的复制 ?

10、git 的常用指令有哪些 ?


1、对 this 的理解, 三种改变 this 的方式 ?

1.任何情况下直接在script中写入的this都是window。 2.函数中的this 非严格模式:this指向window, 严格模式时:this指向undefined。 3.箭头函数的this        ✏️ this都指向箭头函数外上下文环境的this指向 4.对象中this
✏️ 对象属性的this 指向对象外上下文环境的this ✏️ 对象方法(普通函数)中的this,指向当前对象(谁执行该方法,this就指向谁)
5.回调函数的this指向
✏️ setTimeout,setInterval回调函数不管是否是严格模式都会指向window。 ✏️ 通过在函数内执行当前回调函数 非严格模式:this指向window, 严格模式时:this指向undefined。 ✏️ 递归函数中的this 非严格模式:this指向window, 严格模式时:this指向undefined。 ✏️  使用arguments 0执行函数时 this指向arguments。 ✏️ 事件中的回调函数,this指向事件侦听的对象(e.currentTarget);
6、call,apply,bind方法执行时this的指向
✏️ 如果call,apply,bind传参时,第一个参数传入的不是null或者undefined,传入什么this指向什么 ✏️ 如果第一个参数传入的是null或者undefined ,非严格模式下指向window
7、在ES6的类中this的指向
✏️ 构造函数中的this指向实例当前类所产生的新的实例对象 ✏️ 类中实例化方法中this指向谁执行该方法,this指向谁 ✏️ 类中静态方法中this执行该类或者该类的构造函数 ✏️ 类中实例化箭头方法,this仍然指向当前类实例化的实例对象
8、ES5的原型对象中this的指向
✏️ 在原型的方法中,this指向实例化当前构造函数的实例化对象(谁执行该方法,this指向谁); ✏️ 三种改变this指向的方式 ✏️ 函数名.call(this,....)this写谁就指谁。 ✏️ 函数名.apply(this,[参数1,参数2,...]) this写谁就指谁。 ✏️ 函数名. bind (this,1,2,3) this写谁就指谁。

 

2cookie, localStorage,sessionStorage 的区别 ?

📕 cookie

存储方式 存储用户信息,获取数据需要与服务器建立连接。 以路径存储,上层路径不能访问下层的路径cookie,下层的路径cookie可以访问上层的路径cookie 作用与特性 可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie 中,以免影响页面性能。 可设置过期时间。 存储数量及大小 将cookie控制在4095B以内,超出的数据会被忽略。 IE6或更低版本 最多存20个cookie; IE7及以上 版本 多可以有50个; Firefox多 50个; chrome和Safari没有做硬性限制。 cookie最大特征就是可以在页面与服务器间互相传递,当发送或者接受数据时自动传递

📕 localStorage

存储客户端信息,无需请求服务器。 数据永久保存,除非用户手动清理客户端缓存。 开发者可自行封装一个方法,设置失效时间。 5M左右,各浏览器的存储空间有差异。 任何地方都可以存都可以取 操作简单

📕 sessionStorage

存储客户端信息,无需请求服务器。 数据保存在当前会话,刷新页面数据不会被清除,结束会话(关闭浏览器、关闭页面、跳转页面)数据失效。 5M左右,各浏览器的存储空间有差异。 同页面不同窗口中数据不会共享

 

3、原生 ajax 的流程 ?  

4、如何实现继承 ?

📕 对于 JavaScript 来说,继承有两个要点:             1. 复用父构造函数中的代码             2. 复用父原型中的代码第一种实现复用父构造函数中的代码,我们可以考虑调用父构造函数并将 this 绑定到子构造函数。 📕 第一种方法:复用父原型中的代码,我们只需改变原型链即可。将子构造函数的原型对象的 proto属性指向父构造函数的原型对象。 📕 第二种实现 使用 new 操作符来替代直接使用 proto 属性来改变原型链。 📕 第三种实现 使用一个空构造函数来作为中介函数,这样就不会将构造函数中的属性混到 prototype 中
📕 第四种实现     es6类的继承extends。

5、函数的节流和防抖是什么 ?

📕 节流

节流是指当一个事件触发的时候,为防止事件的连续频繁触发,设置定时器,达到一种一段事件内只触发一次的效果,在当前事件内不会再次触发,当前事件结束以后,再次触发才有效.

📕 防抖

防抖是指当一个事件触发的时候, 为防止频繁触发事件, 设置定时器,以达到一种 频繁触发期间不处理, 只有当最后一次连续触发结束以后才处理

 

6、什么是 Promise 以及promise的作用 ?

Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息; 从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。 promise有三种状态: pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行 promise是用来解决两个问题的: 回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象 promise可以支持多个并发的请求,获取并发请求中的数据 这个promise可以解决异步的问题,本身不能说promise是异步的

7Promsie async/await 的区别和使用 ?

✏️ 函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。 ✏️ 第1点暗示我们不能在 外层代码中使用await,因为不在async函数内。使用:           1.async和await是配对使用的,await存在于async的内部。否则会报错 。           2.await表示在这里等待一个promise返回,再接下来执行。           3.await后面跟着的应该是一个promise对象,(也可以不是,如果不是接下来也没什么意义了)

8、对于数组去重你有哪些办法 ?

📕 第一种:
for(var i=0;i

📕 第二种:

var arr1=[];
for(var i=0;i

📕 第三种:

var arr1=[];
for(var i=0;i

📕 第四种:

var arr1=[];
for(var i=0;i

📕 第五种:

var arr1=[];
for(var i=0;i

📕 第六种:

arr=[1,2,3,1,2,3,1,2,3]
new Set(arr);

9、如何实现数组的复制 ?

📕 for循环逐一复制
var arr1=[];
for(var i=0;i

📕 ...方式

var arr1=[...arr];

📕 slice方法

var arr1=arr.slice();

📕 concat方法

var arr1=arr.concat();

📕 map方法

var arr1=arr.map(item=>item);

📕 reduce方法

var arr1=arr.reduce((v,t)=>v.push(t),[])

10、git 的常用指令有哪些 ?

git branch 分支查看 git branch branch_1 增加分支 git checkout branch 分支切换 git merge branch_1 合并分支(合并前要切换当前分支至master) git branch -d branch_1 删除分支 git remote 查看当前仓库管理的远程仓库信息 git remote show origin 查看指定的远程仓库的详细信息 git push --set-upstream origin branch_1 第一次将本地分支推到远程仓库 git push <远程主机名> <本地分支名>:<远程分支名> 将本地分支推到远程分支 git pull <远程主机名> <远程分支>:<本地分支> 将远程分支拉到本地分支 git branch -d branch_0 删除本地合并后分支 git brench -D branch_0 删除本地未合并分支 it push origin --delete branch_0 删除远程分支 git restore [filename] 进行清除工作区的改变 git tag 查看标签 git tag v1.0.0 打标签 git push origin v1.0.0 将tag同步到远程服务器

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...