闭包的理解
函数执形成一个私有的作用域,保护里面的私有变量不受外界的干扰,这种保护机制称之为“闭包”
市面上的开发者认为的闭包是:形成一个不销毁的私有作用域(私有栈内存)才是闭包
代码示例 ```javascript //=>闭包:柯理化函数 function fn() { return function () {
} } var f = fn(); */
/* //=>闭包:惰性函数 var utils = (function () { return {
}
})();
2.
闭包项目实战应用
1.
真实项目中为了保证JS的性能(堆栈内存的性能优化),应该尽可能的减少闭包的使用(不销毁的堆栈内存是耗性能的)
2.
闭包具有“保护”作用:保护私有变量不受外界的干扰
1.
在真实项目中,尤其是团队协作开发的时候,应当尽可能的减少全局变量的使用,以防止相互之前的冲突(“全局变量污染”),那么此时我们完全可以把自己这一部分内容封装到一个闭包中,让全局变量转换为私有变量
2.
代码示例
```javascript
/*
(function () {
var n = 12;
function fn() {
}
//...
})();
*/
3.
不仅如此,我们封装类库插件的时候,也会把自己的程序都存放到闭包中保护起来,防止和用户的程序冲突,但是我们又需要暴露一些方法给客户使用,这样我们如何处理呢?
4.
JQ这种方式:把需要暴露的方法抛到全局
/*
(function () {
function jQuery() {
//...
}
//...
window.jQuery = window.$ = jQuery;//=>把需要供外面使用的方法,通过给WIN设置属性的方式暴露出去
})();
// jQuery();
// $();
*/
2. Zepto这种方式:基于RETURN把需要共外面使用的方法暴露出去
2. /*
var Zepto=(function () {
//...
return {
xxx:function () {
}
};
})();
Zepto.xxx();
*/
- .闭包具有“保存”作用:形成不销毁的栈内存,把一些值保存下来,方便后面的调取使用
