1,闭包
1.1闭包的概念
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能够读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数”。在本质上,闭包是将函数内部和函数外部连接起来的桥梁
1.2闭包的原理
闭包的实现原理,其实是利用了作用域链的特性,我们都知道作用域链就是当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终寻找最外层也就是全局作用域,这样就形成了一个链条
1.3闭包的作用
隐藏变量,避免全局污染;可以读取函数内部的变量。如果闭包使用不当,优点就变成了缺点;比如:导致变量不会被垃圾回收机制回收,造成内存消耗;不恰当的使用闭包可能会造成内存泄漏的问题
2,事件流
2.1事件流的定义
页面触发一个事件时,会按照一定的顺序来响应事件,事件的响应过程为事件流
2.2事件流的分类
(1)冒泡型事件流: 从明确事件源到不明确的事件源依次向上响应 (2)捕获型的事件流:从不确定事件源到确定事件源依次向下响应
2.3阻止事件流
(1)阻止冒泡事件:给子级加event.stopPropagation()或者在事件处理函数中返回false。return false不仅阻止了事件往上冒泡,而且阻止了事件本身(阻止默认事件event.preventDefault)
2.4委派事件
事件委派,通俗的话就是将元素的事件委派给他的父级或者更外级的元素处理,他的实现机制就是事件冒泡。
事件委托的优点:只需将同类元素的事件委托给父级或者更外级的元素,不需要给所有的元素都绑定事件,减少内存占用空间,提升性能;动态新增的元素无需重新绑定事件。
注意事项:事件委托的实现依靠的是冒泡,因此不支持事件冒泡的事件不适合使用事件委托。不是所有的事件绑定都适合事件委托,不恰当使用反而可能导致不需要绑定事件的也被绑定上了事件。
3,this指向
3.1普通函数指向
在普通函数中,谁调用该函数this就指向谁
3.2事件绑定中的指向
事件绑定共有三种模式:行内绑定、动态绑定、事件监听
行内绑定this一般指向window,动态绑定和事件监听this指向节点对象
3.3构造函数中的this
this指向实例化对象
3.4window定时器中的this
setInterval(obj.fun,1000); // this指向window对象
setInterval('obj.fun()',1000); // this指向obj对象
4,methods、computed、watch之间的关系
4.1计算属性和方法的区别
computed有缓存;computed中的方法,主要依据data中的数据生成的新的数据,里面的方法在第一次调用编译之后就不在进行调用,数据不更新便不执行
methods没有缓存;只要调用就执行
4.2computed和watch的区别
大多情况下,computed和watch可以互换;watch中可以写异步,waatch中的写法比较复杂一点,watch可以实现一些简单的功能
4.3watch和methods的区别
watch主要是用来监控数据变化
方法里面就写一些常规的方法
5,深拷贝和浅拷贝
简单点说,假设a复制了b,当修改b时,a也发生了变化,为浅拷贝,否则为深拷贝。