前端面试题解答

1.cookie作用:记住用户登录信息,创建购物车,跟踪用户行为。

#cookie是一小段文本信息,伴随着用户请求在web服务器和浏览器之间传递。

#cookie 是存在用户硬盘中,可以作为全局变量,用户每次访问站点时,Web应用程序都可以读取 Cookie 包含的信息。当用户再次访问这个站点时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它添加到request header的Cookie字段中,与http请求一起发送到该站点。可以通过document.cookie访问它。

#cookie在http中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用。大小限制在4kb。

#cookie每次请求都会被自动添加到Request Header中,无形中增加了流量。cookie信息越大,对服务器请求的时间越长。百度个性化定制广告去除可以在底部的使用必读那里取消cookie追踪。

2.跨站脚本攻击(Cross Site Scripting)缩写为CSS,通常叫xss。
3.console.log()
4.return
5.闭包:有权访问另一个函数作用域内变量的函数都是闭包。这里 inc 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。

js的每个函数都是一个个小黑屋,它可以获取外界信息,但是外界却无法直接看到里面的内容。//封装性

存疑:闭包如何产生内存消耗及性能消耗

1.
function a(){
var n = 0;
function inc() {
n++;
console.log(n);
}
inc();
inc();
}
a(); //控制台输出1,再输出2
2.
function a(){
var n = 0;
this.inc = function () {
n++;
console.log(n);
};
}
var c = new a();
c.inc(); //控制台输出1
c.inc(); //控制台输出2
3.
function a(){
var n = 0;
this.inc = function () {
n++;
console.log(n);
};
}
var c = new a();
c.inc(); //控制台输出1
c.inc(); //控制台输出2

陷阱题目:(存疑)输出10个10.

function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
var funcs = createFunctions();
//createFunctions();
for (var i=0; i < funcs.length; i++){ console.log(funcs[i]());}

函数带()才是执行函数! 单纯的一句 var f = function() { alert('Hi'); }; 是不会弹窗的,后面接一句 f(); 才会执行函数内部的代码。i还在被function引用着,不会被回收。

闭包其实就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。

不必要的闭包只会徒增内存消耗!

附加:js垃圾回收机制:找出不再使用的变量,然后释放掉其占用的内存,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。全局变量的生命周期直至浏览器卸载页面才会结束,局部变量只在函数的执行过程中存在。

垃圾回收方式:标记清除、引用计数(低版本的ie,内存泄露)。
标记清除:当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,离开环境的时候(函数执行结束)将其标记为“离开环境”。怎么标记有很多种方式,比如特殊位的反转、维护一个列表等。

引用计数:这种垃圾回收方式是引起IE9之前的版本内存泄漏的原因。内存泄漏和闭包没有关系,但是和垃圾回收方式和浏览器有关。


6.局部变量的访问速度比全局变量快。//局部变量 全局变量 静态变量 堆栈等概念 区别 怎么实现  创建一个js程序 在计算机内部是怎么运行的  计算机微机组成 linux原理 指令 js历史 发展状况

7.chrome,firefox前端调试的方法、静脉曲张、给父母做体检、寻求市场痛点  失败的原因 不要去找成功的原因 

8.哪些平时要注意的行为修养 console.方法  方法 熟悉 变量 事件 对象 

9.全局变量和局部变量

var a = 10;
function test(){
    a = 100;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
test();

函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a

10.display:none  隐藏对应的元素,在文档布局中不再给它分配空间 

    visibility:hidden 文档布局保留

11.position:absolute;relative;fixed

12.box-sizing:border-box// content-box 

设置width/height属性指的是border + padding + content

13.json与xml的区别

(1).数据体积方面。

JSON相对于XML来讲,数据的体积小,传递的速度更快些。

(2).数据交互方面。

JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
(3).数据描述方面。
JSON对数据的描述性比XML较差。
(4).传输速度方面。

JSON的速度要远远快于XML。

14. CSS sprites:把图片集合到一张,然后用backgroud position,repeat等进行分合。减少图片资源,减少请求。

15.http2.0 

16.<!DOCTYPE> 告知浏览器以何种模式来渲染文档.有严格模式和混杂模式

17.清除浮动几种方法:1.clear:both  2.overflow:auto/hidden ;zoom:1;  3. #parent:after{ content:"."; height:0; visibility:hidden; display:block;   clear:both; }

18.IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框

19.减少页面加载的方法:合并图片 合并css 优化图片 域名加斜杆 表明高度和宽度

20.null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
当声明的变量还未被初始化时,变量的默认值为undefined。 
null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。

21.document.write只能重绘整个页面

innerHTML可以重绘页面的一部分

22.new操作符。伪代码。

23.const :const的引入其实就是告诉编译器和其它程序员(外部引用者更为合适),该值(变量)应该保持不变

24js延迟加载的方式有哪些?defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js

25.js中call()和apply()区别 

https://blog.csdn.net/ganyingxie123456/article/details/70855586

26.内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

内存泄漏与内存溢出是不同的概念。

27.代码层面:避免使用css表达式,避免使用高级选择器,通配选择器。 
缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减少DNS查找等 
请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。 

请求带宽:压缩文件,开启GZIP

添加Expires头能有效的利用浏览器的缓存能力来改善页面的性能,能在后续的页面中有效避免很多不必要的Http请求,WEB服务器使用Expires头来告诉Web客户端它可以使用一个组件的当前副本,直到指定的时间为止。

28.回调函数:回调函数区别于普通函数在于它的调用方式。只有当某个函数(更确切的说是函数的指针)被作为参数,被另一个函数调用时,它才是回调函数

DLL:动态链接库文件

异步回调。

29.window.XMLHttpRequest代表的是window的一个属性。这个是用来区分浏览器的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值