面试题总结
什么是闭包?为什么使用?简述闭包的优点和缺点
外部函数嵌套内部函数,内部函数在外部调用
重用一个变量,并且保证该变量不被污染
解决全局变量和局部变量都具有不可兼得的优缺点
全局变量:可重用但是容易被污染
局部变量:仅在函数内部可用,不会被污染,不可重用
闭包的缺点:
比普通函数占用更多的内存。
解决:闭包不在使用时,要及时释放。
将引用内层函数对象的变量赋值为null。
什么是回流(reflow)和重绘(repaint)?
回流:浏览器在渲染页面的时,某个部分发生了变化影响了网页的布局
重绘:不改变元素的内部布局
重排:DOM的结构发生改变
浏览器渲染器页面的过程
1.解析HTML文件,创建DOM树
2.解析CSS
3.将CSS和DOM合并,构建渲染树
4.进行布局和绘制(重排和重绘)
什么是同源策略
域名,协议,端口号相同,所有支持javascript的浏览器都会执行这个策略
什么是跨域
一个域的页面去请求另一个域的资源
jsonp的原理
动态添加一个script标签,通过script的src属性,向服务器请求数据,返回数据并执行回调函数
什么是内存泄露,怎么防止
垃圾回收机制就是为了防止内存泄漏的,内存泄漏的含义就是不需要某块内存时他依旧还存在,垃圾回收机制就是寻找不在使用的变量并释放他们的内存,当一个变量的生命周期结束之后他的内存就应该被释放,变量分为全局变量和在函数中产生的局部变量,局部变量在函数调用完成之后它的内存就释放的,而全局变量的生命周期会一直持续到浏览器关闭,所以说使用全局变量过多就会内存泄漏
- 当页面中的元素移出时,他绑定的事件没有被移除,就会造成内存泄漏,必须手动将事件解绑 btn.onclick = null;
- 当原有的DOM节点移除后,它的子节点没有被移除,解决的办法是先移除子节点,在移除父节点
- setTimeout 的第一个参数使用字符串而非函数的话
解释高内聚,低耦合
模块独立性就指的是每个模块完成系统独立的功能
高内聚指的是一个模块内部的各个元素联系紧密
低耦合指的是尽量让各个模块之间独立,互不影响,降低模块与模块之间的联系
AJAX的步骤
- 创建xmLhttpRequest对象
- 设置请求的方式
- 调用回调函数
- 发送请求
创建XMLHttpRequest对象
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
除了ie5,ie6以外的浏览器XMLHttpRequest是window的对象
xhr = new XMLHttpReques();
}else{
ie5,ie6以外的浏览器
xhr = new ActiveXObject(‘Microsoft.XMLHttp’);
}
return xhr;
}
function getAjax(url,fn){
var xhr = getXhr();
设置请求的方式
xhr.open(‘get’,url,true)
Xhr.onreadystatuschange = function(){
If(xhr.readyStatus === 4 && xhr.status ===200){
Var datajson =eval(‘(’+xhr.responestText+’)’)
Fn(datajson)
}
}
Xhr.send(null) 如果请求不成功则重置xhr的值
}
getAjax(“data.json”,function(data){
Console.log(data)
})
解决AJAX不能前进,后退的问题
通过h5的history属性解决,h5新增加了一个window.onpopstate,当用户点击前进,后退按钮时就会触发该事件,返回之前的页面时就会知道那个页面的pageIndex,pushStatus(pageIndex)就会把当前的pageIndex存起来,在返回这个页面时获取到pageIndex
雅虎公司了解吗
雅虎是第一家提供英特网导航服务的网站,创始人是杨致远和大卫·费罗,2005年由阿里巴巴集团全资收购
前端的三大框架以及前端的其他框架
Vue.js Angular.js React.js Jquery
Bootstrap mui easyUI