1.cookie作用:记住用户登录信息,创建购物车,跟踪用户行为。
#cookie是一小段文本信息,伴随着用户请求在web服务器和浏览器之间传递。
#cookie 是存在用户硬盘中,可以作为全局变量,用户每次访问站点时,Web应用程序都可以读取 Cookie 包含的信息。当用户再次访问这个站点时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它添加到request header的Cookie字段中,与http请求一起发送到该站点。可以通过document.cookie访问它。
#cookie在http中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用。大小限制在4kb。
#cookie每次请求都会被自动添加到Request Header中,无形中增加了流量。cookie信息越大,对服务器请求的时间越长。百度个性化定制广告去除可以在底部的使用必读那里取消cookie追踪。
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的一个属性。这个是用来区分浏览器的