JS面试题二
1、怎么找出数组中五个最大的值
方法其实有挺多种,比如用两个for循环嵌套;Array.sort();递归查找;但是它的时间复杂度最少也为O(log n^2)
可以使用一个for循环嵌套,里面使用Math.max(), 由于这个方法里面是一个一个传参,可以用拓展运算符...展开数组传入,这样时间复杂度就只有O(log n)
2、说一下JS中的堆与栈,null为什么存在栈,它不是空对象吗
堆和栈都是用来存储变量数据的,在JavaScript中变量分为两种,一种是基本类型(String,Number、Boolean、null、undefined、symbol(ES6)),一种是引用类型(Object、Array、Function)
JS中的基本数据类型(string, boolean, number, null, undefined)保存在栈空间中,因为他是值类型,空间是固定的;
JS中的引用数据类型保存在堆空间中,因为它的大小不固定,长度不固定所以放在堆中,而栈内存中则存放地址,地址指向堆内存中的对象,是按引用访问的。所以当访问引用数据时先访问栈空间中的地址,再通过地址指向去访问对应的堆空间。