基本信息
文件名称:看看这些前端面试题,带你搞定高频知识点(六).docx
文件大小:17.36 KB
总页数:5 页
更新时间:2025-06-14
总字数:约2.47千字
文档摘要

看看这些前端面试题,带你搞定高频知识点(六)

每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。

面试官:请你简述var、let、const三者之间的区别?

我:呃~,好的,三者的作用区别总结如下:

var:最常用的变量;允许重复声明,但会导致数据被覆盖;会产生变量提升;局部变量挂载到全局对象上,会造成全局对象的污染。

console.log(a)//因变量提升,vara;提到前面但是没有赋值,所以值为undefined

vara=1

vara=你好//var声明的变量会被重新赋值

console.log(a)//a会打印被重新赋值的值

console.log(window.a)//var声明的局部变量会被挂载到全局变量上,造成全局变量的污染。

let:es6新增命令,用法类似var;不允许重复声明;不存在变量提升;常作用于块级作用域而避免局部变量造成全局变量的污染。

leta=10;

console.log(a)//不存在变量提升,所以值为:10

console.log(window.a)//不会造成全局污染,所以值为undefined

for(leti=0;ii++){//会生成块级作用域,i的值只能在块级作用域中使用

console.log(i)

console.log(i)//因为拿不到块级作用域中的值,所以报错。

const:es6新增命令,用于声明常量且值无法被修改;声明常量必须立刻初始化,否则后期赋值报错;不能重复声明;const指向变量的地址,只要变量名所引用的地址不变就不会报错

constarr=[小张,小王,小李,小赵]

arr[0]=小明

console.log(arr)//[小明,小王,小李,小赵]

constarr=[]//报错

面试官:请你谈谈对深拷贝与浅拷贝的理解

我:呃~,好的,对两者的理解总结如下:

深拷贝:新数据与原数据互不打扰。

//扩展运算符在一维数组中是属于深拷贝,在多维数组中属于浅拷贝

letarr=[1,2,3]

letnewArr=[...arr]

newArr.push(4)

console.log(arr,newArr)//[1,2,3],[1,2,3,4]

//深拷贝用法

letlist=[

{id:1,name:张三,age:18},

{id:2,name:李四,age:28},

{id:3,name:王五,age:38},

letnewList=JSON.parse(JSON.stringify(list))

newList.pop()

console.log(list.length,newList.length)//32

当然,深拷贝也有一种标准写法,如下:

//标准的深拷贝=引用数据类型(数组,对象)

functiondeepClone(source){

consttargetObj=source.constructor===Array[]:{}

for(letkeysinsource){

if(source.hasOwnProperty(keys)){

//引用数据类型

if(source[keys]typeofsource[keys]===object){

targetObj[keys]=source[keys].constructor===Array[]:{}

//递归

targetObj[keys]=deepClone(source[keys])

}else{

//基本数据类型,直接赋值

targetObj[keys]=source[keys]

returntargetObj

letobj={

name:张三,

age:18,

hobby:[抽烟,喝酒,烫头],

action:{

am:敲代码,

pm:睡觉

letnewObj=deepClone(obj)

newO=李四

console.log(,newO)//张三李四

浅拷贝:新数据会影响原数据。