1 Star 0 Fork 0

lv_jing / fed-e-task-01-02

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

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

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}

a[6]();

答:结果为 10,因为这里通过 var 定义的变量 i 为一个全局变量,function 方法调用时,for 循环已经执行完成,i 已经变成了 10,所以结果为 10

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

var tmp = 123;

if (true) {
  console.log(tmp);
  let tmp;
}

答:结果会报错,因为只要块级作用域内存在 let 命令,它所声明的变量就“绑定”这个区域,不再受外部的影响,而使用 let 声明的变量不会被提升,打印 tmp 时,还未声明,所以会报错

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

var arr = [12, 24, 32, 89, 4];

答:

var arr = [12, 24, 32, 89, 4];

const minValue = Math.min(...arr);

console.log(minValue); // 4

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

答:

  1. var :① var 是 ES5 中声明变量的方式,ES5 中只有全局作用域和函数作用域,没有块作用域的概念,所以 var 声明的变量,可以跨块访问;② var 声明的变量会被提升到作用域的顶部并初始化为 undefined;③ 相同作用域内可以使用 var 重复声明变量,后面的会覆盖前面的变量。
  2. let:① let 是 ES6 中新增的声明变量的方式,ES6 中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的 { } 也属于块作用域,let 声明的变量只能在块作用域里访问,不能跨块访问 ② let 声明的变量不会被提升 ③ let 不允许在相同作用域内,重复声明同一个变量。
  3. const: 用来声明一个常量,使用时必须初始化(即必须赋值),且变量声明过后不能修改(不能赋给一个新的内存地址,但是可以修改一个地址中的一个属性),其他和 let 类似

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

var a = 10;
var obj = {
  a: 20,
  fn() {
    setTimeout(() => {
      console.log(this.a);
    });
  }
};
obj.fn();

答:结果为 20,因为 setTimeout 中定义的方法使用了箭头函数定义,会改变 this 的指向为定义它时,所处上下文的对象的 this 指向,即为调用它的 fn 方法的 this 指向,而 fn 方法的定义为 function fn () {} 的缩写,为普通函数,fn 中的 this 指向调用它的 obj, 所以 this.a === obj.a === 20

// 而 fn 方法的定义为 function () {} 的缩写,为普通函数,fn 中的 this 指向调用它的 obj, 所以 this.a === obj.a === 20

六、简述 Symbol 类型的用途?

答:

  1. 为对象添加一个独一无二的属性名 通过 Symbol 创建的每一个值都是唯一的,永远不会重复
  2. 模拟实现对象的私有成员 对象内部可以访问到这个成员,但外部无法创建一个完全相同的 Symbol,所以不能直接访问到这个成员,只能调用这个对象中普通名称的成员,可以实现成员的私有化

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

答:浅拷贝是将对象的每个属性依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用地址,当引用指向的值改变时也会跟着变化。

​ 深拷贝复制变量值,对于引用数据,则递归至基本类型后,再复制,深拷贝后的对象与原来的对象是完全隔离的,互不影响,对一个对象的修改并不会影响另一个对象

八、请简述 TypeScript 与 JavaScript 之前的关系?

答:TypeScript 是基于 JavaScript 之上的一门编程语言,是 JavaScript 的超集,最终会编译成 JavaScript,解决了 JavaScript 自有类型系统的不足,大大提高代码的可靠程度,任何一个 JavaScript 运行环境都支持 TypeScript

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

答:优点:1. 代码更智能,编码更准确,可以在编译阶段暴露出错误,避免大部分的错误;2. 支持自动转换 JavaScript 的新特性,可以立即使用新特性;3. 任何一个 JavaScript 运行环境都支持;4. 作为一门完整的编程语言,功能更强大,生态更健全、更完善;5. TypeScript 属于【渐进式】,可以快速应用在项目中。 缺点:1. 相比于 JavaScript 本身多了很多概念,提高学习成本; 2. 项目初期,TypeScript 会增加一些成本;

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

答:引用计数的原理是设置引用数,引用关系改变时修改引用数字,判断当前引用数为 0 时立即回收;

引用计数的优点:

1. 可以即时回收垃圾对象
  1. 最大限度减少程序卡顿时间

引用计数的缺点:

1. 无法回收循环引用的对象
  1. 资源消耗较大

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

答:标记整理算法的工作流程是:

1. 遍历所有对象标记找标记活动对象,找到所有可达对象,递归标记
  1. 遍历所有对象执行整理,移动对象位置 3. 清除没有标记的对象 4. 回收相应的空间

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

答: 新生代对象回收过程采用复制算法 + 标记整理,新生代内存区分为两个等大小空间,使用空间为 From,空闲空间为 To,活动对象存储在 From 空间,标记整理后将活动对象拷贝至 To,From 与 To 交换空间完成释放

十三、描述增量标记算法在何时使用及工作原理

答:标记算法算法在老生代对象回收中执行标记清除及标记整理后使用;

​ 工作原理是将连续的垃圾回收拆分成多个小步与程序运行交替完成来进行效率优化。

空文件

简介

拉勾大前端作业:Part1 - 模块二 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/lv_jing0359/fed-e-task-01-02.git
git@gitee.com:lv_jing0359/fed-e-task-01-02.git
lv_jing0359
fed-e-task-01-02
fed-e-task-01-02
master

搜索帮助