2024 高频前端面试题汇总之js篇(二)
前言
8. 深浅拷贝的区别?如何实现一个深拷贝?
// 这个浅拷贝的手写
Function shallowCopy(obj){
let newObj = {]
for( let key in obj ){
if(obj.hasOwnProperty(key)){
//hasOwnProperty检测对象自己身上方法而不是原先链上的
newObj[key]=obj[key]
}
}
return newObj
}
// 咱们会浅拷贝当然还要深拷贝呀 开始
Function shallowCopy(obj){
let newObj = {]
for( let key in obj ){
if(obj.hasOwnProperty(key)){
//hasOwnProperty检测对象自己身上方法而不是原先链上的
if ( typeof(obj[key])!==obj||obj[key]===null){
newObj[key]=obj[key]
}else{
newObj[key]=shallowCopy(obj[key])
}
}
}
return newObj
}
8. 说说你对作用域的理解
- 是什么: 变量和函数能够生效的区域,这个区域叫作用域
- 有哪些:
- 全局作用域
- 函数作用域
- 块级作用域
- 作用域链:作用域只能从内到外的访问,这种访问规则形成的链状关系我们称之为作用域链
- 词法作用域:指的是函数或变量定义的区域
9.说说你对原型的理解
- 是什么:
- 显示原型指的是函数身上自带的 prototype 属性, 通常可以将一些书型盒方法添加在显示原型上,可供实例对象继承到
- 隐式原型 proto 是对象这种结构上的一个属性,其中包含了创建该对象时,隐式继承到的属性
- 原型链:创建一个实例对象时,实例对象的隐式原型===创建该对象的构造函数的显示原型,在js中对象的查找规则是先在对象中查找,找不到再去对象的隐式原型上查找,顺着隐式原型一层层往上找,直到找到null为止,这种查找规则我们就叫原型链
- 可用来实现属性的继承
10. new的实现原理
- 构造函数有返回值,且为引用类型时会覆盖new当中的返回值 说到这个咱就开始手写一个new的构造函数
let p = myNew(Person, 'Tom')
function myNew(...args) { // [Person, 'Tom']
let obj = {}
obj.__proto__ = args[0].prototype
const res = args[0].apply(obj, args.slice(1))
return (typeof res === 'object' && res !== null) ? res : obj
}
11. 说说Ajax的原理
- 是什么: Async Javascript and XML ,是一种异步js和网页交互的技术,可以实现不刷新网页就跟服务器交换数据,更新页面
- 实现过程
- 创建XHR实例对象
- 调用实例对象中的open方法与服务器建立连接
- 调用实例对象中的send方法发送请求
- 监听onreadystatechange事件,通过判断readyState的值来获取到最终的数据
- 将数据更新到html页面
# 说说js中的事件模型
- 什么事件流
- 分类
如觉得本文对你有帮助的话,欢迎点赞❤❤❤,写作不易,持续输出的背后是无数个日夜的积累,您的点赞是持续写作的动力,感谢支持!
转载自:https://juejin.cn/post/7343863800146460735