一. 闭包
1.闭包是什么?
闭包是一个函数加上到创建函数的作用域的连接,闭包"关闭"了函数的自由变量
2.闭包解决了什么问题(优点)?
2.1 内部函数可以访问外部函数的局部变量
2.2 闭包可以解决的问题
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
var lis = document.getElementByTagName('li');
for(var i = 0; i<lis.length;i++){
(function(i)){
lis[i].onclick = function(){
alert(i)
}
}
}
上方代码每次点击会依次打印出来 0,1,2,3,如果此地方不用闭包的方式,那么每次点击打印的都是4
3.闭包的缺点
3.1 变量会驻留在内存中,造成内存损耗问题
3.2 内存泄漏【ie】 ==> 可说可不说,如果说一定要提到ie
二.原型链
1.原型可以解决什么问题
对象共享属性和共享方法
2.谁有原型
函数拥有:prototype
对象拥有:_proto_
3.对象查找属性或者方法的顺序
先在对象本身中查找 ==> 构造函数中查找 ==> 对象的原型 ==> 构造函数的原型中 ==>当前原型的原型
4.原型链
4.1 是什么?
就是把原型串联起来
4.2 原型链的最顶端是null
三.localStorage,cookie,sessionStorage的区别
1.localStorage的特点
location(本地) 就保存在本地电脑上,一直有,除非我硬盘没了或者手动删除
2.sessionStorage的特点
session(会议),开完会就解散,关闭浏览器就翻篇了
3.cookie的特点
cookie小饼干很好吃,吃一次很难忘,关了浏览器下次还记得味道,但是量太少不够吃(内存小),还放不长容易发霉(有生命周期)
四.var、let、const区别
1.共同点
都是可以声明变量
2.不同点
区别一:
var具有变量提升机制
let(会有暂时性死区问题)和const没有变量提升机制
区别二:
var 可以多次声明同一个变量
let和const不可以多次声明同一个变量
区别三:
var、let是声明变量的
const声明常量
var和let声明的变量可以再次赋值,但是const不可以再次赋值
区别四:
var声明的变量没有自身作用域
let和const声明的变量有自身的作用域