千锋教育web前端高频面试题视频教程,kerwin大话前端面试秘籍(附答案)

P5 005-JS高频面试题-1
1、JS的内置对象(就是JS中的封装函数)
数据封装类对象:Object,Array,Boolean,Number,String
其他对象:Function,Arguments,Math,Date,RegExp,Error
ES6新增对象:symbol(标识唯一ID),Map,Set,Promise,Proxy,Reflect
2、最小化重绘和回流
需要对元素进行复杂的操作时,可以先隐藏(display:“none”),操作完成后再显示
需要创建多个DOM节点时,使用DocumentFargment创建完成后一次性加入document
缓存Layout属性值,如:var left= elem.offsetLeft
这样,多次使用left只会产生一次回流
尽量避免使用table布局(table元素一旦触发回流就会导致table里的所有元素回流)
3、JavaScript作用域链
全局函数无法查看局部函数的内部细节,但是局部函数可以查看其上层的函数细节,直至全局细节
如果当前作用域没有找到属性或方法,会向上层作用域[[Scoped]]查找,直至全局函数,这种形式就是作用域链
4、数据请求
XHR:
var xhr = new XMLHttpRequest();
xhr.open('get',"www.aaa.com",true);
xhr.send();
xhr.onreadystatechange = function(){
//readstate 4
//status 200 - 300
//200 成功(有可能强缓存策略,cache-control,expired)
//301 302 redirect
}
xhr 可以被取消,使用 .abort() 终止请求
xhr.abort();//终止请求
fetch(w3c提出,为了解决xhr请求混乱,对异步处理不友好的问题):
fetch("url",{method:"post",body:"",credencial:"include"})
.then(res=>res.json())
.then(res=>{console.log(res)})
//兼容性问题
//发出的请求,默认是不带cookie.credencial:“include”
jsonp(解决跨域问题)
动态创建script src指向没有跨域限制, onload
后端返回的数据格式一定是,test('["111","222","333"]');
前端提前定义好test这个方法,通过形参就拿到数据了
jsonp可以做get请求,无法做post请求(缺点)
jsonp可以取消吗?不能取消
5、跨域和同源策略
同源策略其实就是浏览器的一种机制,只允许在同源,也就是同协议,同域名,同端口的情况下才能进行数据交互,但是在开发过程中,往往一个项目的接口不止一个域,所以就需要做跨域的处理,常用的跨域方式有以下几种:
1)jsonp,主要依赖script标签不受同源策略影响,src指向某一个接口的地址,同步需要传递callback回调函数名字,这样当接口调用成功后,本地创建的全局回调函数就会执行,并且接收到数据,不使用img标签的原因是因为img 标签无法执行js语句
2)cors,依赖服务器对前端的请求头信息进行放行,不做限制
Access-Control-Allow-origin配置成*
3)代理访问,前端访问不存在跨域问题的代理服务器,代理服务器再去访问目标服务器(服务器之间没有跨域限制)