有些文章有一些面试题,炫技总结,很不适合我这样没什么工作经验的人,下面是我自己总结的,比较容易理解,适合像我一样刚开始找工作的人
1、什么是commonJS?
commonJs是js语言的模块化规范,它通常在服务器nodeJS上使用。项目是由多个模块组成的,模块和模块之间的调用,需要各个模块有相同规范的API,
2、闭包
闭包:可读取其它函数内部变量的函数
闭包产生的条件:1、在函数内部也有一个函数
2、函数内部的函数用到了外部函数的局部变量
3、外部函数把内部函数作为返回值return出去了
闭包的优缺点:
优点:变量可以长期存在、可以避免全局变量的污染
缺点:消耗内存、会在父函数外部改变内部变量值,比较耗费内存、使用不当会 造成内存溢出的问题
闭包和递归的区别
闭包和递归时函数中的两个比较特殊的情况,并且都被告诫人们要慎用。闭包相当于函数的返回值为另一个函数,而递归则相当于函数的参数为另一个函数。
3、内存溢出:
应用系统中存在无法回收的内存,或使用的内存过多,最终使得程序运行所需要的内存大于虚拟机提供的内存。
如何解决内存溢出?
及时释放不用的内存,避免死循环,减少使用闭包函数,减少不必要的全局变量
4、垃圾回收机制
有两种方法:标记清除法和引用计数法
标记清除法:垃圾回收器会在运行时候给内存中所有变量加上标记,然后去掉环境中的变量,以及被环境变量所引用的变量(闭包),在这些完成之后仍被标记的变量就是需要删除的变量,因为环境中的变量已经无法访问到这些变量了,然后垃圾回收器会把这些带有标记的
删除,收回所占内存
引用计数法:
当声明了一个变量并将一个引用类型赋值给该变量的时候,该值引用次数加一,如果该变量又取得另外一个值就减一,当引用次数为0的时候被回收
垃圾回收机制什么时候被触发
垃圾回收机制的触发,总是在内存将近快满的时候,并会暂停正常代码的执行,等待回收完毕后,继续执行后续代码;垃圾回收规则,全局变量不回收,局部变量失去引用回收(未释放的闭包不做回收)。
5、js数据类型
基本数据类型: Number Null Boolean bigInt String Symbol Undefined
BigInt可以表示任意大的整数 作用 解决精度缺失的问题:BigInt数据类型比Number类型支持更大的整数值
“Symbol类型是 ES6 引入的一种数据类型,表示独一无二的值,是JavaScript语言的第七种数据类型。”
引用数据类型:object Array Date Function RegExp
基本数据类型寻处在栈中,引用数据类型存储在堆中
6、js变量和函数声明的提升
在js中变量和函数的声明会提升到最顶部执行
函数的提升高于变量的提升
函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。匿名函数不会提升。
7、this
-
- this总是指向函数的直接调用者
- 如果有new关键字,this指向new出来的对象
- 在事件中,this指向触发这个事件的对象
8、js数组和对象的遍历方式
-
- for in
- for
- forEach
- for-of
9、for in 和for of 的区别
For of 是遍历的每一项值,
For in 是遍历每一项的索引
10、map与forEach的区别
forEach 方法,是最基本的方法,就是遍历与循环,默认有 3 个传参:分别是遍历的数组内
容 item、数组索引 index、和当前遍历数组 Array
map 方法,基本用法与 forEach 一致,但是不同的,它会返回一个新的数组,所以 callback
需要有 return 值,如果没有,会返回 undefined