# fed-e-task-01-02 **Repository Path**: wanghan0321/fed-e-task-01-02 ## Basic Information - **Project Name**: fed-e-task-01-02 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 模块二:ES新特性与TypeScript、JS性能优化 ## 简答题 ### 一、请说出下列最终的执行结果,并解释问什么 ```js var a = []; for(var i = 0; i < 10; i++){ a[i] = function(){ console.log(i) } } a[6]() ``` 解: 最终执行结果为10; 因为使用var声明的变量会被提升,所有每次i++都会将i的值修改并记录 ### 二、请说出下列最终的执行结果,并解释问什么 ```js var tmp = 123; if(true){ console.log(tmp) let tmp } ``` 解: 执行结果是程序报错。 因为使用let进行定于会产生一个块级作用域,所有tmp在定义之前输出结果就会报错 ### 三、结合ES6新语法,用最简单的方式找出数组中的最小值 ```js var arr = [12,34,32,89,4] ``` 解: ```js Math.min(...arr) ``` ### 四、请详细说明 var,let,const 三种声明变量的方式之间的具体差别 解: var 声明的变量的作用域是整个封闭函数,声明会被提升 let 跟 const 声明的变量是有块级作用域,变量只在其声明的块或子块中可用,声明不会被提升 const 声明的变量为常量,不可以重新赋值。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如变量为对象时,可以改变对象中某个元素的值,但不可以替换整个对象。 let 跟 var 声明的变量是动态的,是可做修改的 ### 五、请说出下列最终的执行结果,并解释问什么 ```js var a = 10; var obj = { a:20, fn(){ setTimeout(()=>{ console.log(this.a) }) } } obj.fn() ``` 解: 程序执行结果为20 箭头函数自身不存在this,如果使用this,若箭头函数在对象内,则this指向对象本身,若箭头函数不在对象内,则this指向全局this。严格模式下箭头函数的this指向undefined ### 六、简述 `Symbol` 类型的用途 解: 1. 使用Symbol来作为对象属性名(key) 2. 使用Symbol来替代常量 3. 使用Symbol定义类的私有属性/方法 ### 七、说说什么是浅拷贝,什么是深拷贝 解: 浅拷贝:也就是拷贝对象里面的数据,但是不拷贝对象里面的子对象 深拷贝:会克隆出一个对象,数据相同,但是引用地址不同(就是拷贝对象里面的数据,而且拷贝它里面的子对象) 浅拷贝跟深拷贝和原数据指向的对象是不一致的。 浅拷贝跟深拷贝修改基本数据类型不会使得原数据一同修改。 浅拷贝修改原数据中的子对象会使原数据一同修改,深拷贝则不会; ### 八、请简述TypeScript 与 JavaScript之间的关系 解: TypeScript 是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程,是一种给 JavaScript 添加特性的语言扩展 ### 九、请谈谈你所认为的TypeScript优缺点 解: 优点: 一.代码的可读性和可维护性强: (1).类型系统增强了代码的可读性。 (2).在编译阶段即可发现错误,与在运行时报错相比优势明显。 (3).与之匹配的IDE具有良好的人性化功能,比如包括代码补全、接口提示和重构等。 二.代码具有较强的兼容性: (1).js文件可以直接重命名为ts文件。 (2).如果没有显示声明变量类型,也可以自动推断类型。 (3).即使ts代码在编译阶段报错,也能够编译成js代码。 缺点: 短期内可能增加开发成本,但是长期而言有利于维护。 ### 十、描述引用计数的工作原理和优缺点 解: 设置一个引用计数器,当引用关系改变时修改引用计数器,当引用计数器为0时立即回收。 优点: 发现垃圾时立即回收、最大限度减少程序暂停 缺点: 无法回收循环引用的对象、时间开销大 ### 十一、描述标记整理算法的工作流程。 解: 1、遍历所有对象找标记活动对象 2、遍历所有对象清楚没有标记对象 3、清除阶段会先执行整理,移动对象位置 4、回收相应空间 ### 十二、描述V8中新生代存储垃圾回收的流程 1、新生代内存区分为二个等大空间,使用空间为From,空闲空间为To 2、活动对象储存于From空间 3、标记整理后将活动对象拷贝至To 4、From与To交换空间完成释放 ### 十三、描述增量标记算法在何时使用及工作原理。 解: 在V8清除老生代对象时为提高清除效率优化时使用; 清除时,程序执行然后遍历对象进行标记,之后交替执行程序和增量标操作,标记完成后,进行清除操作,完成垃圾回收;