面试记录2
1. Ajax的原理,和进程相关
2. 进程和线程的关系
3. css选择器的优先级
- 不同级别
!important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性
- 相同级别
后面覆盖前面的
4. 闭包相关
闭包的作用:
- 在函数外部读取函数内部局部变量;
- 在函数外部读取函数内部局部变量,变量被封装到局部作用域,只提供接口获取该变量,就像传统oop的私有变量,公有方法一样,这样可以避免污染全局变量;
- 让这些值始终保存在内存中。
使用场景
- 由于setTimeout方法不能传递参数,可以用闭包来解决
function func(param) {
return function() {
alert(param);
}
}
var f = func(1)
setTimeout(f, 1000);
- 节流函数
function debounce(func, delay) {
let timer;
//该函数是一个闭包,所以timer会一直存在于内存中,并且timer只能在函数内部访问
return function (...args) {
if (timer) {
clearTimeout(timer);
}
timer = window.setTimeout(() => {
func.apply(this, args);
}, delay);
}
}
5. html5新特性
- Canvas Api
- <audio> <vedio>
- Geolocation Api
- Websocket Api
- Form Api
- Storage Api
- 离线应用
6. 垂直居中
垂直居中
用弹性盒子实现水平垂直居中
<div class="parent">
<div class="children">我是通过flex的水平垂直居中噢!</div>
</div>
html,body{
width: 100%;
height: 200px;
}
.parent {
display:flex;
align-items: center;/*垂直居中*/
justify-content: center;/*水平居中*/
width:100%;
height:100%;
background-color:red;
}
.children {
background-color:blue;
}
7. Promise
两个作用
- 避免回调地狱
- 为了我们的代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来
8. alert(1&&2) alert(1||2)
alert(1 && 2) //2 括号里面先计算,var a = 1 && 2; alert(a)
alert(1 || 2) //1 括号里面先计算,var a = 1 || 2; alert(a)
9. display: none 和 visibility:hidden
display:none //隐藏元素,不占据文档流
visibility:hidden //隐藏元素,不占据文档流
10. 对象先会先找自身的属性,然后再去找原型上的属性
function C1(name) {
if (name) this.name = name;
};
C1.prototype.name = 'weilei';
console.log(new C1().name); // weilei
function C2(name) {
this.name = name;
};
C2.prototype.name = 'weilei';
console.log(new C2().name); // undefined
function C3(name) {
this.name = name || 'sam';
};
C3.prototype.name = 'weilei';
console.log(new C3().name); // sam
11. mouseover和mouseenter区别
唯一的区别是 onmouseenter 事件不支持冒泡
12. js改变html的title
document.title = 'xxx'