# fed-e-task-01-02 **Repository Path**: cycodeer/fed-e-task-01-02 ## Basic Information - **Project Name**: fed-e-task-01-02 - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fed-e-task-01-02 # 简答题 ## 问题1 var a = []; for(var i=0;i <10;i++){ a[i] = function(){ console.log(i) } } a[6](); 执行结果为 10 原因:var声明的i为全局变量,a[6]方法执行时取到的变量i的值为全局变量i的值,此时循环结束,i的值为10 ## 问题2 var temp = 123; if(true){ console.log(temp); let temp; } 结果:ReferenceError异常 let声明局部作用域变量,所以外部temp被覆盖。但是let没用变量提升的能力,所以在声明前使用temp会报ReferenceError异常。 ## 问题3 var a = [12, 34, 32, 89, 4]; Math.min(...a); ## 问题4 var: 存在变量声明提升,不存在局部作用域 let: 不存在变量声明提升,存在局部作用域,声明变量可以修改 const: 声明常量,不存在常量声明提升,存在局部作用域,声明的常量地址或者值不能修改。 ## 问题5 var a = 10; var obj = { a: 20, fn(){ setTimeout(()=>{ console.log(this.a); }) } } obj.fn(); 执行结果: 20 obj.fn()方法中this指向obj,setTimeout中的回调为箭头函数,箭头函数不改变当前的作用域,所以回调中的this还是指向obj ## 问题6 Symbol类型作用: 1. 作为对象属性名,可以防止属性名冲突;JSON.stringfy不会输出symbol属性,可以更好的规划数据解构;Object.keys不会获取symbol属性 2. 作为私有属性或方法名,是想类的私有化属性 ## 问题7 深拷贝:完全赋值一个新的对象,把老的对象copy 一份放在新的存储区中。新老对象的改变相互无影响。 浅拷贝: 只是拷贝一个引用地址,新老变量指向同一个对象。新变量指向的对象内容改变后,老变量指向的对象也会变化,因为他们指向的是同一个对象。 ## 问题8 ### Tyepscript和Javascript之间的关系 1. TypeScript是javascript的超集,包含了JavaScript的所有特性,并扩展了面向对象的部分,加入了类型检查。 2. javascript可以不做修改和typescript一起工作,编译器可以将typescirp转成javascript ## 问题9 TS缺点: 1. 短期内工作量增加,需要定义大量的数据解构 2. 需要新的工程化配置 3. 部分开源软件尚不支持TS ## 问题10 引用计数原理:系统维护一个引用计数列表,实时监控每个变量的引用计数,当一个方法执行完成时,更新变量的引用计数。当变量的引用数为0时,则可以进行垃圾回收。 优点:实时回收,不中断界面渲染 缺点: 没有办法回收循环引用的变量。实时维护计数立标,消耗性能 ## 问题11 标记整理算法: 从根节点标记所有可达对象,所有不可达对象为可回收对象。对象回收后,将可达对象的存储区域整理到连续的存储区域。 ## 问题12 新生代内存回收 新生代区域分成两等份,from区和to区。开始数据存储在From区,使用标记算法标记活动对象。开始垃圾回收的时候,将标记对象复制到to区,释放FROM区域。然后from区和to区域互换进行下一次垃圾回收。经过两次垃圾回收仍然存活的对象,会移动到老生代存储区。 ## 问题 13 增量标记算法 在老生代垃圾回收时,由于垃圾回收是在主线程中完成的,所以会阻塞界面渲染,造成界面卡顿。增量标记算法是将垃圾回收分成小的片段,js逻辑和垃圾回收交替执行,从而优化界面响应。