ES新特性与TypeScript、JS性能优化题目

·  阅读 448

简单题

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

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

答:

执行结果:10

原因分析:因为使用var关键字声明的变量会存在变量提升的问题,即使i在循环条件中,但for循环执行完毕以后空间并没有被释放,此时的i等于10,调用a的执行函数时,则输出10。

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

var tmp = 123
if(true){
    console.log(tmp)
    let tmp
}
复制代码

答:

执行结果:报错

原因分析:在块级作用域中使用let声明的变量会被绑定在块级作用域中,此时的tmp还未声明就被调用,结果会报错,使用let在块级作用域中声明的变量不会受外层同名变量的影响,因为它们所处的作用域不同。

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

var arr = [12, 34, 32, 89, 4]
复制代码

答:

执行结果:12

var arr = [12, 34, 32, 89, 4]

const getMin = arr.sort((a, b) => a < b)[0]

console.log(getMin) // 输出12
复制代码

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

1、var用在函数外面则是全局变量,用在函数内部则是局部变量,var可以先使用后声明,不会报错,var存在变量提升的问题,var定义的变量可以被重复定义,var a=1;var a=2;这种情况不会报错。

2、let的作用域是当前的块级作用域,不受外部影响,通常在函数内部使用,作用域在函数范围内,可防止全局污染,let必须先声明后使用,否则会报错,使用let定义的变量不可被重复定义。

3、const的作用域是当前的块级作用域,不受外部影响,const定义的变量后续不可再次更改,如果定义的是对象,对象内部属性可以修改,指向的内存地址不可以被修改,var,let可以修改,使用const定义的变量不可被重复定义。

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

var a = 10
var obj = {
    a:20,
    fn(){
        setTimeout(()=>{
            console.log(this.a)
        })
    }
}
obj.fn()
复制代码

答:

输出结果:20

原因分析:obj调用fn函数时,setTimeout的回调函数使用的是箭头函数,箭头函数中的this指向的最近的this,也就是obj,所以obj.a输出20。

六、简述Symbol类型的用途。

答:

1、保证唯一性,每一个Symbol的值都是不相等的。

2、定义的私有属性,外部无法访问,只能通过类中方法进行访问。

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

答:

浅拷贝:浅拷贝拷贝的是对象的指针,而不复制对象本身,新旧对象还是共享一块内存。

深拷贝:深拷贝会去创造一个一模一样的对象,但新对象和原对象不会共享内存,修改新对象也不会影响到原对象。

两者区别:浅拷贝只复制对象的第一层属性,深拷贝可以对对象的属性进行递归复制。

八、请简述TypeScript与JavaScript之间的关系。

答:

1、JavaScript是一种脚本语言,TypeScript是JavaScript的一个超集,实现以面向对象编程的方式使用JavaScript,可编译成纯JavaScript。

2、JavaScript可以直接运行到浏览器和NODE平台中,TypeScript需要编译成JavaScript后才能运行。

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

答:

1、使用TypeScript会增加我们的工作量,因为需要明确每一个函数和变量的类型。

2、增加了学习成本,需要了解和使用更多的特性。

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

答:

工作原理:核心思想就是在内部去通过一个引用计数器来维护每一个对象都存在的一个引用数值,通过这个数值是否为0来判断这个对象是否是一个垃圾对象,如果是垃圾对象让垃圾回收器来进行一个回收和释放。

优点:可以及时回收垃圾,最大限度减少程序暂停。

缺点:无法回收循环引用的对象,资源消耗较大,时间开销大。

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

答:

工作原理:这种算法分标记、清除、整理三个阶段来进行,首先它会去遍历所有的对象,然后去给当前的活动对象进行标记,紧接着会去清除掉那些没有被标记的对象,清除阶段会先执行整理,移动对象位置去让它们能够在地址上产生连续,最后去释放这些垃圾的所占用的空间。

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

答:

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

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

答:

使用场景:增量标记优化垃圾回收操作,垃圾回收的时候会停止程序运行,程序执行的时候不能做垃圾回收,时间消耗较大,所以使用增量标记算法进行垃圾回收。

工作原理:将一整段垃圾回收操作拆分成多个小部分执行,实现垃圾回收玉程序执行交替进行,组合完成整个垃圾回收。

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改