一
a[6]() === 10
代码中存在两个全局变量,数组a与循环变量i, 数组中每个元素保存着一个匿名函数,该函数引用了循环变量i。在调用a[0]() 时,i值是已经循环10次后的变量值10
二
`报错`
let 块级作用域 没有变量提升机制 是暂时性死区
三
Math.min(...arr)
四
- var定义变量,没有块的概念,可以跨块访问,不能跨函数访问,不初始化出现undefined,不会报错,有变量提升机制。
- let定义变量,只能在块作用域里访问,也不能跨函数访问,对函数外部无影响,有暂时性死区。
- const定义常量,只能在块作用域里访问,也不能跨函数访问,使用时必须赋值,而且不能修改,不可以修
改复杂数据类型的指针,但是可以修改里面的内容,比如添加键值对。
五
20
箭头函数没有this指针,this指针和外层的指针指向相同,指向obj
六
1:使用Symbol来作为对象属性名
2:使用Symbol来替代常量
七
深拷贝 是 拷贝了对象上的所有键值对、原型链上的方法和属性,彻底的拷贝,两对象中所有的成员都是
独立的一份,而且,成员对象中的成员对象也是独立一份。
浅拷贝 是 中的某些成员变量可能是共享的,深拷贝如果不够彻底,就是浅拷贝,指
针指向同一个,一个改变另外一个也会跟着改
八
javascript是一个弱类型语言,Typescript是Javascript的一个超集,最大区别就是Ts提供了类型系统。实现以面向对象编程的方式使用Javascript。当然最后代码还是编译为Javascript。
简单来讲 TS包括了JS,就像饺子和饺子馅的关系
九
- 优点:
- 可读性强,可维护性高
- 静态检查
- 缺点 :
- 有一定的学习成本,需要理解接口、泛型、类、枚举类型等
- 短期的、小的项目可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本
十
工作原理:设置引用数,判断当前引用数是否为 0,引用关系改变时修改引用数字
- 优点:
- 发现垃圾时立即回收
- 最大限度减少程序暂停(保证空间不会被占满)
- 缺点:
- 无法回收循环引用的对象
- 时间开销大(监控对象,维护引用数)
十一
遍历所有对象找标记活动对象
清除阶段会先执行整理,移动对象位置,将活动对象放在一起
清除没有标记的对象,同时把第一次遍历所做的标记抹掉
把回收的空间放到空闲列表上面,方便后续程序申请空间使用
- 优点: 减少了内存空间的碎片化
- 缺点: 不能立即回收对象
十二
- 回收过程采用复制算法+标记整理算法
- 新生代分为 from-to 两个等大空间 32M(32 位为 16M)
- 使用空间为 from 内存区,空闲空间为 to 内存区,当 from 空间应用一定大小会触发标记整理
- 当发生标记整理后,复制活动对象到 to 内存区,然后 From 空间进行内存释放。
- 如果拷贝时出现晋升,将新生代活动对象移入老生代
- 当 To 空间的使用率达到 25%时,将新生代活动对象移入老生代
- 当一轮 GC 执行完毕后还存活的新生代测需要晋级
- 当一次 GC 操作后,From 和 to 需要进行置换
十三
- 使用时机:会穿插在程序的运行中执行。
- 工作原理: 对象存在直接可达和间接可达,将遍历对象标记,拆分成多个小步骤,先标记直接可达对象。间接可达的标记与程序执行交替执行,最终完成清除。