软通动力2(套题)
选择题 | 填空题 | 问答题 | 编程题 | 试题难度 |
---|---|---|---|---|
0 | 0 | 13 | 0 | 比较难 |
问答题
4、es6与es5构造函数的区别是什么?
构造函数的定义不同,es5使用this.constructor,es6定义在class里面。
调用方式不同,es6必须使用new,es5可以直接调用
5、数组排序去重的方法?
这种题目看似很简单,其实有陷阱。要考虑性能最佳。
方法(一)
let ary=[1,2,3,3,4,4,4,5];
var obj={};
var newArray=[];//判断是否重复
var len=ary.length;
for(var i=0;i<len;i++){
var key=ary[i];
if(!obj[key+""]){
newArray.push(key);
obj[key+""]=true;
}
}
思路:将数组中的元素变为对象的key,每次比较与对象的key做比较(查找key是非常快的),如果有就不加到新数组否则加上,这样就快速的做到了去重的目的。
方法(二)
let ary=[1,2,3,3,4,4,4,5];
var newArray=Array.from(new Set([1,2,3,3,4,4,4,5]))
使用es6提供的Set对象,效率是最高的。
6、事件冒泡是什么?怎么阻止事件冒泡?
事件冒泡是指:事件触发时从根节点传播到目标节点,又由目标节点传播到根据节点的过程。
IE浏览器 window.event.cancelBubble=true; 其它 event.stopPropagation();
8、let,const和var的区别?
这三个关键字都是用来定义变量的
var比较传统,相同的变量名可以定义多个,变量的作用域可以得到提升。
let可以说是对var更严格的限制,在同一个作用域不能定义相同的变量,必须先定义在使用,且是一个块级作用域。
const和let作用大致相同,用来定义常量,定义的常量不能在赋值,且必须在定义的同时赋值。
11、谈谈你对promise的理解。
Promise是ES6提供的一种异步编程方案。
通过new Promise(function (resolve, reject) {
}
)
resolve函数将Promise对象的状态从“未完成”变为“成功”
reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”
成功处理使用then()回调函数,失败处理使用catch()回调函数,支持链式调用。
12、你们项目中性能优化如何做?
这个问题对于想拿10k以上的同学来讲必会
答:性能优化主要是围绕执行速度来做的。通常的做法是这样的
1.使用图片精灵,将多个图标放在一个图片上,然后通过背景图片定位来显示图标
2.有些图标使用使用阿里字体的,使用他们自带的云加速器下载字体文件
3.在首次加载的时候,将所需要的数据都放在一个接口上返回,减少请求的数量,经过测试这个效果还是挺明显的。
4.在编码上,我们通过会将this对象存储到临时变量,减少this查找的时间。
5.对于频繁使用的数据,会将数据缓存起来,减少多次请求接口。
6.使用压缩工具,对html、css、js文件,进行合并压缩处理,减少文件的体积。
7,对于数据较大的加载,通常采用分页加载或是按需加载或是延迟加载来处理。
这是我们比较常见的优化手段。