homework-part1-2-王祥

214 阅读4分钟

一 , 请说出下列最终执行结果
var a = []for (var i = 0; i<10; i++) { a[i] = function() {   console.log(i)  }}
 a[6]()解答: 10

二, 请说出下列最终的执行结果,并解释为什么?

var tmp = 123
if (true) {  console.log(tmp)  let tmp}解答: 会报错,因为console.log(tmp) 是在let 前打印的使用let命令声明变量之前,该变量都是不可用的

三, 结合ES6 新语法,用最简单的方式找出数组种的最小值

var arr = [12,34,32,89,4]console.log(Math.min(...arr));

四, 请详细说明var, let, const 三种声明变量的方式之间的具体差别

var:   声明的变量会变量提升,挂载在全局作用域上let:   属于块级作用域,同一作用域变量名不能相同const: 声明过后不能再修改,一旦声明必须赋值,不能使用null占位

五, 请说出下列代码最终输出的结果,并解释为什么?

var a = 10var obj = {  a: 20,  fn() {    setTimeout(() => {      console.log(this.a)    })  }}obj.fn()解答: 20  ;虽然全局声明变量a = 10 ,但是fn()的方法是再obj对象里的,obj里对a 进行了重新赋值

六, 简述Symbol类型的用途

解答: symbol 最主要的作用是为对象添加独一无二的属性名;
1\. 可以作为扩展对象,属性名冲突问题
2.Symbol 可以实现私有成员

七, 说说什么是浅拷贝?什么是深拷贝?

  浅拷贝:对内存地址的复制,让目标对象指针和源对象指向同一片内存空间  深拷贝: 拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉

八,请简述TypeScript 与JavaScript之间的关系

  typescript: 是强类型,静态类型;从语言层面限制函数的实参类型必须于形参类型相同,不允许隐式转换  1\. 强类型代码错误更早暴露  2\. 强类型代码更智能,编码更准确  3\. 重构更可靠,重构更可靠  4\. 减少了代码层面的不必要的类型判断javascript: 是弱类型,动态类型;不会限制实参的类型,允许隐式转换  1\. 异常需要等到运行时才能发现  2\. 函数功能可能发生改变  3\. 对象索引器的错误用法    const obj = {}    obj[true] = 100 // 属性名会自动转换为字符串    console.log(obj['true'])    君子约定由隐患,强制要求有保障它俩之间的区别就是是否允许类型转换1.TypeScript是javascript的一个超集或者是扩展集  2\. 任何一种javascript运行环境都支持

九,请谈谈你所认为的TypeScript 优缺点

typescript :    1\. 避免类型异常   2.支持转换es6中的新特性    3\. 最低能编译到es3版本的代码(兼容好)   4\. 任何一种javascript运行环境都支持   5\. 功能更为强大,生态也更健全,更完善 angular/vue3.0缺点:    1\. 语言本身多了很多概念 (属于渐进式)    2\. 项目初期,typeScript 会增加一些成本 (大型项目就不会在意这些成本)

十, 描述引用计数的工作原理和优缺点

工作原理:  核心思想:设置引用数,判断当前引用数是否为0  引用计数器  引用关系改变时修改引用数字  引用数字为0时立即回收引用计数算法优点  1\. 发现垃圾时立即回收  2\. 最大限度减少程序暂停引用计数算法缺点  1\. 无法回收循环引用的对象  2\. 时间开销大

十一, 描述标记整理算法的工作流程

  1\. 第一步会先遍历所有对象找标记活动对象
2\. 第二步清除阶段会先执行整理,移动对象位置

十二, 描述V8 中新生代存储区垃圾回收的流程

新生代对象回收实现  1\. 回收过程采用复制算法 + 标记整理  2\. 新生代内存区分二个等大小空间  3\. 使用空间为From,空闲空间为to  4\. 活动对象存储于From空间  5\. 标记整理后将活动对象拷贝至To  6\. FromTo交换空间完成释放 回收细节说明:   1\. 拷贝过程中可能出现晋升   2\. 晋升就是将新生代对象移动至老生代   3\. 一轮GC还存活的新生代需要晋升   4\. To 空间的使用率超过25%25% 是因为到最后FromTo交换空间时,如果过多,新的对象就无法存储进来)