阿里面试题-js

1、js基础类型

boolean, string, number, null, undefined, Object, Symbol

2、Object类型和其它类型有何不同

其它类型是值类型,数据存放在栈里面。
Object类型是堆类型,存放在堆里面。
追问: 如果Object 的属性值时值类型,该属性存放在哪里呢?
堆内存中
我说是栈内存

3、var,let,const 区别

vares5 语法,用于定义变量
letconstes6 语法 分别用于变量,常量
相同:变量都会提升。
不同:var变量没有作用域概念,会提升至全局作用域,let定义的变量只会在局部作用域进行提升,const则是用于定义常量

4、原型链

省略不想写

5、箭头函数和普通函数区别

首先是语法不同。() => {}, function name() {}
this指向有所不同,箭头函数没有自己的this,它的this指向他的父级作用域,普通函数有自己的this
箭头不能作为构造函数即(不能new,也没有prototype)。
箭头函数没有arguments这个对象,普通函数则有。

6、new 创建对象时发生了什么

创建对象,绑定原型链,绑定this,返回对象

7、箭头函数能new吗?

不能,为什么因为他既没有自己的this,有没有prototype所以没办法执行new操作。

8、如何改变this指向

bind, call, apply等方法可以改变this指向。

9、for…in,for…of 区别

for…in 可以变量对象,for…of 通常用于遍历可迭代对象,

10、深浅拷贝的区别

浅拷贝仅仅只拷贝了对象第一层不会嵌套拷贝,当源对象的属性是对象是,拷贝的是引用地址
深拷贝通常是创建一个新对象,将源对象的属性一个一个的添加到新对象上。

11、如何实现深拷贝

JSON.parse(JSON.stringify()) 递归这两种方式实现
追问: 第一种方式什么缺陷吗?
一些特殊对象会导致其异常,比如:RegExp, Date, 无法处理循环引用

12、如何拷贝循环引用的对象

1、递归的过程中使用一个Map或者Array存放已拷贝的对象,再次出现直接使用即可
2、递归限制层数,仅拷贝几层后不再递归。

13、循环引用的对象会被垃圾回收机制回收吗

我的观点是不会,因为该对象一直处于被引用的状态,所以不会被垃圾回收机制标记回收。
我得到的回答是,会!孤岛对象会被垃圾回收机制检测到并将其释放。
GPT的回答是 会!

14、React 函数式组件如何模拟生命周期回调

useEffect(() => {}, []) 代表初始化阶段
useEffect(() => {}, [a]) 代表更新阶段
useEffect(() => { return function destory() {} }, []) 这个返回的函数就是卸载时执行的

15、React State更新机制

异步更新,react会将他们收集起来,待到一定的时机一起更新,这样做有一个好处,多个state改变只会更新一次视图。

16、key的作用

方便diff算法 去更新DOM,例子:[1, 2, 3, 4, 5] 找到 4 ,遍历数组肯定比直接用索引取慢,所以这就是key的作用
追问: diff算法 是深度优先还是广度优先,是深度优先,有利于最小视图的更新,在一定程度上提升了性能。

17、算法&场景

1、编写一个函数,接收两个参数,参数一一个数组,参数二数字,从数组中找出三个数的和等于参数二并返回其,若不足三个则反[],未找到也[]

function findListItemParams(list, value) {}
// 示例
输入:[1, 2, 3], 6
输出:[0, 1, 2] // 返回

2、这部分有些忘了。篇幅过长没记住,大概是根据给定的数据结构将其渲染成dom,数据结构包含宽高位置信息,不能使用定位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值