前端面试题(补充)

面试题(2021-12)

JavaScript

1.闭包的概念:什么是闭包,有什么优缺点,如何释放 在项目中拿闭包来干嘛:

Vue data是一个典型的闭包 return

函数内部定义函数,连接函数内部和外部的桥梁,内层函数引用着外层函数的变量 无法释放 形成闭包,闭包就是能够读取其他函数内部变量的函数

优点:防止全局污染   缺点:消耗内存

释放:javaScript闭包变量对象中未用到的属性,js引擎会释放其占用的内存空间

参考答案:js闭包实例汇总 - front-gl - 博客园

2.面向对象开发有哪些主要特征

封装 继承 多态  面向对象的特征是什么-常见问题-PHP中文网

3.什么是原型链,原型对象

原型对象:每一个对象上,都有一个属性,叫__proto__,它指向了一个对象,这个对象我们叫原型对象。

原型链:原型链指查找对象上某个属性的查找机制,查找一个对象上的私有属性,先在自己的私有属性中找,找不到,就沿着__proto__去原型对象上找

原型对象和原型链_小召小召的博客-CSDN博客_原型对象和原型链

4.什么是作用域,作用域链  

作用域:一个变量可以访问的范围  全局作用域 局部作用域 块级作用

作用域链:调用某个函数或属性时,先在当前作用域寻找,如果找不到的情况下去父级寻找,如果父级找不到继续向上级寻找,直到找到全局作用域为止,这就是作用域链

5.数组常用API

1.push()从数组的尾部插入一个或多个元素会修改原数组返回新数组长度

2.pop()从数组的尾部删除一个元素会修改原数组返回被删除的元素

3.unshift() 从数组的头部插入一个或多个元素会修改原数组 返回新数组长度

4.shift() 从数组的头部删除一个元素

5.slice(start, end)  start:开始下标, end:结束下标(end切不到) 不会修改原数组返回裁切出来的数组

6.splice(start, length, [可选参数列表])  start:开始裁切的下标, length:要裁切多少个

7.concat([多个参数]) 连接一个或多个数组  不会修改原数组返回连接过后的数组

8.join("连接符");  以特定的连接符, 把数组连接成字符串

9.reverse() 反转数组, 把数组的顺序进行颠倒

10.filter() 过滤数组方法, 里面接受一个回调函数 不修改原数组会创建新数组, 接收过滤出来的满足条件的元素, 并且返回这个数组

11.map() map数组方法, 里面接受一个回调函数不修改原数组返回一个新数组, (为原数组的每一项经过函数处理后的返回值)

12.forEach(function(ele, i, array)){ //业务逻辑 } 把forEach当成for循环来使用, forEach就是用来遍历数组的

13.lastIndexOf(要查找的元素, 指定下标)

6.什么是事件冒泡/事件捕获

事件冒泡:事件被触发时一层一层往上传递到window对象

事件捕获:与事件冒泡相反,由外到里

解决方法:

(1)通过返回false来取消默认的行为并阻止事件起泡。

        (2)通过使用 preventDefault() 方法只取消默认的行为

(3)通过使用 stopPropagation() 方法只阻止一个事件起泡。

7.什么是构造函数

Function Aaa(name){

 This.name = name;

}

通过  new 函数名   来实例化对象的函数叫构造函数

js构造函数详解 - 长安城下翩翩少年 - 博客园

8.es6有哪些新特性

ES6:let const; 箭头函数;模板字符串;promise;解构赋值;数组新增的法:forEach,map,filter,some,every,indexOf;参数默认值,模块的导入和导出

9.var、let和const 的区别是什么

(1)块级作用域:let和const具有块级作用域,var不存在块级作用域。

(2)变量提升:var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否则会报错。

(3)给全局添加属性:浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,但是let和const不会。

(4)重复声明:var声明变量时,可以重复声明变量,const和let不允许重复声明变量。

(5)暂时性死区:在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。

(6)初始值设置:在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

(7)指针指向:let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。

10.普通函数和箭头函数的区别

(1)箭头函数比普通函数更加简洁

(2)箭头函数没有自己的this

(3)箭头函数继承来的this指向永远不会改变

(4)call()、apply()、bind()等方法不能改变箭头函数中this的指

(5)箭头函数不能作为构造函数使用

(6)箭头函数没有自己的arguments

(7)箭头函数没有prototype

(8)箭头函数不能用作Generator函数,不能使用yeild关键字

11.不同场景下,this指向有哪些

(1)在全局中this指向window

(2)在函数中(普通函数),this永远指向调用他的那个对象

(3)在箭头函数中,箭头函数中没有this,使用的this就是箭头函数父级的this。

(4)在构造函数中,this指向构造出来的实例。

12.什么时候用that

Let that = this;

原因:this指向的对象发生了变化,故需要在函数前将this指向的对象提前保存一下为了避免这种问题,我们可以用that来指向,就是把this指向that,把this复制一份,给that,这样的话下面的that所表示的就一直是原先第一次指定的那个对象了

getList(){

 Let that = this;

 that

}

13.如何判断一个变量是否为数组/对象

(1)用Object.toString()方法判断

(2)通过Array.isArray()可以判断一个对象是否为数组

(3)判断原型

(4)判断构造函数

14.什么是跨域?为什么会导致跨域?在实际开发过程中,有哪些方法解决

什么是跨域,为什么浏览器会禁止跨域,以及实现跨域的几种方式_weixin_30536513的博客-CSDN博客

浏览器出于安全考虑 要求前后端 协议 域名 端口 一定要一致 只要有一个不一样就会违反同源策略 造成跨域问题

跨域:浏览器的一个安全策略 同源策略 约定 域名 主机 端口号一致 不然就会触发同源策略 导致跨域

解决跨域的手段: JSONP (vue里面安装一个jsonp插件)    Cors跨域

Proxy 代理跨域  正向代理 接口转发 vue.config.js    Nginx 反向代理

15.常见的http状态码有哪些?代表什么

    (1)信息代码:1xx:信息,请求收到,继续处理;

(2)成功代码:2xx:成功,行为被成功地接受、理解和采纳;

(3)重定向:3xx:重定向,为了完成请求,必须进一步执行的动作;

(4)客户端错误:4xx:客户端错误,请求包含语法错误或者请求无法实现;

(5)服务器错误:5xx:服务器错误,服务器不能实现一种明显无效的请求;

16.防抖和节流的概念,应用场景

函数防抖(debounce):指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

函数节流(throttle):就是指连续触发事件但是在 n 秒中只执行一次函数

17.js中的事件队列

 Js事件循环 eventLoop 什么是宏任务 微任务

在JavaScript中,任务被分为两种,一种宏任务(MacroTask),一种叫微任务(MicroTask)

常见的宏任务:script全部代码、setTimeout、setInterval

常见的微任务:Promise中then的回调函数、MutationObserver、Process.nextTick

18.数组去重有哪些方法

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值