前端常见面试题2019(二)
程序员文章站
2022-04-18 21:55:50
...
1. 清除浮动的几种方式?为什么要清除浮动呢?
答:
- 添加新的元素,应用clear:both;(额外标签法)
.clear{clear:both; height: 0; line-height: 0; font-size: 0}
- 父级div定义overflow:auto;
- 使用:after方法,作用与浮动元素的父元素。(伪元素)
.clearfix:after{
content:"";//设置内容为空
height:0;//高度为0
line-height:0;//行高为0
display:block;//将文本转为块级元素
visibility:hidden;//将元素隐藏
clear:both//清除浮动
}
.clearfix{
zoom:1;为了兼容IE(触发IE的haslayout属性)
}
- 使用双伪元素
.clearfix:before,.clearfix:after {
content: "";
display: block;
clear: both;
}
.clearfix {
zoom: 1;
}
2. javascript作用域和闭包?
答:变量作用域:包括全局变量和局部变量(函数内部可以直接读取全局变量&函数外部自然不能读取函数内部的局部变量)
- 函数作用域:函数的局部变量仅对函数内部可见。
- 词法作用域:函数的嵌套关系是定义的时候决定的,而不是调用的时候决定的,即嵌套关系是词法分析时确定的,而非运行时决定。
- 全局作用域:在最外层定义的变量,全局对象的变量,任何地方隐匿定义的变量。
- 没有块级作用域。
闭包:就是能够读取其他函数内部变量的函数。也可以理解成”定义在一个函数内部的函数”;
闭包的用途就是一可以读取函数内部的变量,二就是让这些变量的值始终保存在内存中。(内存会消耗过大,所以不能滥用闭包)。
简单例子:↓
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
AJAX的步骤?
答
- 创建ajax对象;
- 发出HTTP请求;
- 接收服务器传回的数据;
- 更新网页数据。
// 1.创建异步对象
var xhr = new XMLHttpRequest();
// 2.设置请求行(get请求数据写在url后面)
xhr.open('get','xxx.php');
// 3.设置请求头(get请求可以省略,post不发数据也可以省略)
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// 4.注册状态改变事件
xhr.onreadystatechange = function () {
// 4.1判断状态&请求是否成功并使用数据
if(xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText);
}
}
// 5.请求主体发送(get请求为空,或者写null。post请求数据写在这里,
// 如果没有数据,直接为空或者写null)
xhr.send(null);
一个页面从输入URL到页面加载显示完成,这个过程发生了什么?(流程说的越详细越好)
答:
- 浏览器查找域名的IP地址,这一步包括DNS具体的查找过程(包括:浏览器缓存-》系统缓存-》路由器缓存…)
- 浏览器向web服务器发送一个HTTP请求;
- 服务器的永久重定向响应(从http://example.com到http://www.example.com);
- 浏览器跟踪重定向地址;
- 服务器处理请求;
- 服务器返回一个HTTP响应;
- 浏览器显示HTML;
- 浏览器发送请求获取嵌入在HTML中的 资源(如图片、音频、视频、css、js等等);
- 浏览器发送异步请求。
JS跨域请求的方式,能写几种写几种?
答:
- 通过jsonp跨域;
- 通过修改document.domain来跨子域;
- 使用window.name来进行跨域;
- 使用HTML5新引进的window.postMessage方法来进行跨域(ie6 7不支持);
- CORS需要服务器设置header:Access-Control-Allow-Origin;
- nginx反向代理 这个方法可以不用目标服务器配合,不过需要搭建一个中转nginx服务器,用于转发请求。
上一篇: 【前端】聊聊面试那些事+面试前的准备
下一篇: 【滴滴日常实习-1轮面经】