# fed-e-part-module-2 **Repository Path**: igor-rub/fed-e-part-module-2 ## Basic Information - **Project Name**: fed-e-part-module-2 - **Description**: 模块2作业 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### Part 2 · js 优化与ts # 简单题 思维导图和笔记在notes文件中 #### 一、请说出下列最终的执行结果,并解释为什么。 ```js var a = [] for(var i = 0; i < 10; i++){ a[i] = function() { console.log(i) } } ``` 答: 答案是没有打印,因为数组的每一项是通过函数进行赋值并没有进行调用,数组的每一项保存了函数 #### 二、请说出下列最终的执行结果,并解释为什么。 ```js var tmp = 123 if(true) { console.log(tmp) let tmp } ``` 答:答案是只能报错,因为let是块级作用域,不能先使用后声明 #### 三、结合ES6新语法,用最简单的方式找出数组的最小值。 ```js var arr = [12, 34, 32, 89, 4] ``` 答: console.log(Math.min(...arr)) #### 四、请详细说明var,let,const三种声明变量的方式之间的具体差别。 var 是最开始js定义变量的方式,也可以省略,会变成全局作用域 let 是es6新出的块级作用域声明符,在使用过程中不能先声明后使用。而且不允许出现同名的变量 const 也是es6新出的声明方式,相比于let ,const的特点就是一旦定义不能修改,比较特殊的是object,修改内部的值是没问题的,因为指针不变, #### 五、请说出下列代码最终输出的结果,并解释为什么。 ```js var a = 10 var obj = { a: 20, fn() { setTimeout(() => { console.log(this.a) }) } } obj.fn() ``` 答: 打印20,因为在fn中使用尖头函数定义数据已经固定了this就是obj对象。所以this.a对应的是obj对象的a属性,所以打印1:20 #### 六、简述symbol类型的用途。 symbol可以声明一个唯一值,用于对象的key symbol也可以当做一个对象的私有属性使用,因为创造的值是唯一的,外部没有办法找到改key #### 七、说说什么是浅拷贝,什么是深拷贝? js存在两种数据类型,一种是基本类型,一种是引用类型。基本类型可以通过 = 赋值然后进行拷贝,但是引用类型通过 = 进行赋值,只是赋值了内存地址,实际上 引用的值还没有修改。所以就是浅拷贝。 深拷贝指的就是重新在内存中创造一份空间来保存需要拷贝的引用类型,比如数组和对象。 #### 八、请简述TypeScript 与 JavaScript之间的关系。 TypeScript 是基于而开发的强类型语言,在定于数据方面,必须指定改变量的值,这样在编译阶段就可以发现很多错误,函数的返回值也需要定于返回类型,从而保证在函数的健壮性。 TypeScript 被tcs编译后,会变成JavaScript #### 九、请谈谈你所认为的TypeScript 优缺点。 优点:强类型,在编译阶段检查错误。具有隐式类型推断,可以更好的提升代码,同样跨平台 缺点:如果是巨型,项目需要很久的编译。在运行时没办法进行类型检查,使用any会破坏ts的健壮性 #### 十、描述引用计数的工作原理和优缺点。 引用技术通过为每个变量提供一个计数的值,使用了变量就+1,删除了就-1.当改值为0的时候,直接进行垃圾的回收。如果存在a=b b=a的情况,就没有办法进行回收,因为计数值最少为1。 优点:发现垃圾立即回收,减少程序暂停 缺点:无法回收循环引用,时刻监控 #### 十一、描述标记整理算法的工作流程。 标记整理算法是基于标记清除的改良版 第一步先遍历产生标记(全局可访问对象) 第二部把不能访问对象全部清除掉, 并交替 执行解决碎片化的问题 #### 十二、描述V8中新生代存储区垃圾回收的流程。 新生代使用 复制算法+标记整理 第一: 使用活动空间From,空闲空间To 标记内存 第二:活动对象存储From 第三:标记整理后把活动对象拷贝到To 第四:From与To交换空间,完成释放 #### 十三、描述增量标记算法在何时使用及工作原理。 在chromeV8引擎中使用,先用标记清除完成垃圾空间回收 用标记整理进行空间优化。 具体操作就是:在内存中分段空间进行优化,和软件程序交替执行。解决的垃圾回收阻塞程序的问题