一、请说出下列最终得执行结果,并解释为什么。
0
解答:执行结果为:10
           首先该段代码在全局作用域中声明了个空数组a,然后for 循环时是使用 var 定义循环变量 i (存在变量提升),且i++并不是重新定义了一个变量,只是对i变量重新赋值了,最终循环结束时i等于10,由于function(){console.log(i)}并没有立即执行,所以等for循环执行结束后,所有的a[i]输出的都是10。
二、请说出下列最终得执行结果,并解释为什么。
0
解答:执行结果为:报错(Uncaught ReferenceError: Cannot access 'tmp' before initialization)
           该代码片段中,首先在全局作用域中声明了个全局变量tmp并赋值为123,但是块级作用域内let又声明了一个局部变量tmp,导致tmp绑定在这个块 级作用域,并且let没有变量提升,所以在let声明变量前,对tmp使用会报错。
三、结合ES6新语法,用最简单的方式找出数组中的最小值。
var arr=[12,22,4,44,18]
解答:Math.min(...arr)
四、请详细说明var、let、const三种声明变量方式之间的具体差别。
解答:
           使用var声明变量
             1.存在变量提升
             2.访问在后续定义的变量,会返回undefined
             3.var没有块级作用域,其声明的变量在其他作用域中可以访问到
           使用let声明变量
             1.使用let声明的变量,会创建一个块级作用域
             2.let声明的变量只在块级作用域内有效,在外部访问不到
             3.同个作用域内,使用let不能重复声明变量
           使用const声明常量
             1.使用const声明的常量不能被修改
             2.使用const声明常量时必须马上赋值
             3.使用const声明引用类型数据的常量时,其指向的是该对象的指针,所以可以在这个常量上增加、删除、修改对象的属性,但是不能直接修改这个常量的值(内存地址不能修改)
五、请说出下列代码最终得执行结果,并解释为什么。
0
解答:执行结果为:20
           首先全局变量a的值是10,obj对象里面由两个key分别时a和fn,a的值时100,fn则是一个函数,函数体里面时一个setTimeout,setTimeout第一个参数是箭头函数,箭头函数里面执行打印this.a。因为箭头函数不会创建自己的this,它只会从自己作用域链的上一层继承this,所以这里的this指向的是obj对象,打印出来的结果是20
六、简述Symbo类型的用途。
解答:
           Symbo是2015提出的一种新的原始数据类型,其主要用途有:
             1.为对象创建独一无二的key值
             2.可以模拟对象的私有属性
             3.可以用作常量
七、说说什么是浅拷贝,什么是深拷贝。
解答:
           浅拷贝:是拷贝一个对象里面的数据,但是不拷贝这个对象里面的子对象。
           深拷贝:会克隆出一个对象,数据相同,但是引用地址不同(就是拷贝这个对象里面的数据,而且拷贝它里面的子对象)。
 
 
八、请简述TypeScript与JavaScript之间的关系。
解答:
           TypeScript是 JavaScript 的超集/扩展集,包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。
           TypeScript 可以使用 JavaScript 中的所有代码和编码概念,TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。
           TypeScript 从核心语言方面和类概念方面对 JavaScript 对象模型进行扩展。
           JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。
           TypeScript 通过类型注解提供编译时的静态类型检查。
           TypeScript 中的数据要求带有明确的类型,JavaScript不要求。
           TypeScript 为函数提供了缺省参数值。
           TypeScript 引入了 JavaScript 中没有的“类”概念。
           TypeScript 中引入了模块的概念,可以把声明、数据、函数和类封装在模块中。
九、请谈谈你所认为的TypeScript优缺点。
解答:
           优点:
             1.TypeScript 增加了代码的可读性和可维护性
             2.TypeScript 非常包容
             3.TypeScript 拥有活跃的社区
           缺点:
             1.有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Classes)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念,如果接触过后端Java语言可能会更加容易上手
             2.短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本
             3.集成到构建流程需要一些工作量
             4.可能和一些库结合的不是很完美
十、描述引用计数的工作原理和优缺点。
解答:
           工作原理:其核心思想是设置引用数,判断当前引用数是否为0;其实现方式是通过设置引用计数器,并根据引用关系变化时修改引用数字,当引用数字为0时,GC就会立即工作,将当前对象的空间进行回收。
           优点:发现垃圾时能立即回收;最大限度减少了程序暂停
           缺点:无法回收循环引用的对象;时间开销较大
十一、描述标记整理算法的工作流程。
解答:
           标记整理算法的工作流程原理:
              标记整理可以看作是标记清除的增强,它也是分为标记和清除两个阶段
              标记阶段:该阶段将作用域中所有可达对象进行标记,标记阶段的操作和标记清除一致
              清除阶段:该阶段会先进行整理,移动对象位置,让它们在地址上产生连续,然后进行清除操作,回收相应的空间
           优点:减少碎片化空间
           缺点:不会立即回收垃圾对象;移动对象位置,回收效率慢
十二、描述V8中新生代存储区垃圾回收的流程。
解答:
           新生代对象回收实现:
             1.回收过程采用复制算法 + 标记整理
             2.新生代内存区分为两个等大小空间
             3.使用空间为From,空间空间为To
             4.活动对象存储于From空间,当From空间使用到一定程度后便会触发GC操作
             5.对From空间进行活动对象的标记,并进行整理
             6.将整理后的活动对象拷贝至To
             7.对From空间进行回收操作
             8.From与To交换空间完成释放
           回收细节说明:
             1.拷贝过程中可能出现晋升
             2.晋升就是将新生代对象移动至老生代对象中
             3.一轮GC过后还存活的新生代对象需要晋升
             4.To空间的使用率超过25%
十二、描述增量标记算法在何时使用及工作原理。
解答:
           增量标记算法:它是在V8清除老生代对象时为提高清除效率优化时使用的,因为在进行垃圾回收的操作时会阻塞程序的执行,所以在老生代中会在程序执行的空档期去执行回收操作,此时就可以使用增量标记算法。它是将当前一整段的垃圾回收操作,分成多个小步组合去完成,实现垃圾回收和程序执行交替完成,可以让时间消耗更合理,达到效率优化的好处
           工作原理:
             1.JS程序执行过程中,会伴随着垃圾回收的工作
             2.当垃圾回收工作时,需要遍历对象进行标记,此时不需要将所有对象进行标记,可以先将直接可达的对象进行标记,标记完成后暂停标记
             3.然后让JS程序执行一会,再让GC机制去做二步标记,将间接可达的对象进行标记,标记完成后暂停标记
             4.重复以上两不操作,让程序执行和垃圾回收的标记操作交替执行,来达到优化效率和提升用户体验的目的
             5.直到标记全部完成后,执行垃圾回收
 
0
 

模块二:ES新特性与TypeScript、JS性能优化的更多相关文章

  1. atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx

    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx 1.1. V3 新特性1 1.2. V2 新特性1 2. Token的归类1 3. Token的用途 ...

  2. js 性能优化 篇一

    JS性能优化 摘自:http://www.china125.com/design/js/3631.htm  首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...

  3. js 性能优化利器:prepack

    1. js 性能优化 js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已. 这就要提到 prep ...

  4. js性能优化-事件委托

    js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...

  5. js性能优化文章集锦

    总结的js性能优化方面的小知识http://www.it165.net/pro/html/201503/35336.html 如何优化你的JS代码http://www.php100.com/html/ ...

  6. 你不知道的Node.js性能优化,读了之后水平直线上升

    本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...

  7. JS性能优化笔记搜索整理

    通过网上查找资料了解关于性能优化方面的内容,现简单整理,仅供大家在优化的过程中参考使用,如有什么问题请及时提出,再做出相应的补充修改. 一. 让代码简洁:一些简略的表达方式也会产生很好的优化 eg:x ...

  8. js性能优化--学习笔记

    <高性能网站建设进阶指南>: 1.使用局部变量,避免深入作用域查找,局部变量是读写速度最快的:把函数中使用次数超过一次的对象属性和数组存储为局部变量是一个好方法:比如for循环中的.len ...

  9. Web篇之JS性能优化

    首先,性能优化分好几个方面,本章我们从js方面来优化. 1:垃圾收集 日常中的某些情况下垃圾收集器无法回收无用变量,导致的一个结果就是——内存使用率不断增高,以下为对应的情况以及处理方法. ①对象相互 ...

随机推荐

  1. Gradle系列之Android Gradle基础配置

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  2. github无法访问

    打开 C:\Windows\System32\Drivers\etc 找到hosts文件. 添加以下代码 #github 192.30.255.112 github.com git 185.31.16 ...

  3. JVM-垃圾回收篇

    目录 JVM-垃圾回收篇 前言 举个例子 JVM 有哪些垃圾回收算法? 标记-清除算法 复制算法 标记-整理算法 分代收集算法 JVM 有哪些垃圾回收器? 概述 几个相关概念 一:Serial 收集器 ...

  4. JVM强引用、软引用、弱引用、虚引用、终结器引用垃圾回收行为总结

    JVM引用 我们希望能描述这样一类对象: 当内存空间还足够时,则能保留在内存中:如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象. -[既偏门又非常高频的面试题]强引用.软引用.弱引用.虚引 ...

  5. 云计算openstack核心组件——neutron网络服务(8)

    一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要 ...

  6. CAS导致的ABA问题以及解决方案

    CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化. 上篇文章讲到CAS会出现一个ABA问题.那什么是ABA问题呢? 官方一点的解释就是:当 ...

  7. JMeter5.0在windows(含插件安装)

    一.jmeter下载 前提:已经安装jdk8+ jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi 有Binaries和Source版本 前 ...

  8. nginx+tomcat集群方法

    下载地址:wget http://nginx.org/download/nginx-1.16.1.tar.gz 解压:tar -zxvf 预编译 nginx+tomcat集群方法: 进入nginx配置 ...

  9. mysql-2-where

    #进阶2:条件查询 /* 语法: SELECT 查询列表 FROM 表名 WHERE 筛选条件 分类: 1.按条件表达式筛选:> < = != <> >= <= 2 ...

  10. 李宏毅老师机器学习第一课Linear regression

    机器学习就是让机器学会自动的找一个函数 学习图谱: 1.regression example appliation estimating the combat power(cp) of a pokem ...