Skip to content
On this page

闭包作用域(scope)

  • 函数执形成一个私有的作用域,保护里面的私有变量不受外界的干扰,这种保护机制称之为“闭包”
  • 市面上的开发者认为的闭包是:形成一个不销毁的私有作用域(私有栈内存)才是闭包

柯理化函数

javascript
function fn() {
  return function () {};
}
var f = fn();
1
2
3
4

惰性函数

javascript
var utils = (function () {
  return {};
})();
1
2
3

闭包项目实战应用

真实项目中为了保证 JS 的性能(堆栈内存的性能优化),应该尽可能的减少闭包的使用(不销毁的堆栈内存是耗性能的)

闭包具有“保护”作用:保护私有变量不受外界的干扰

在真实项目中,尤其是团队协作开发的时候,应当尽可能的减少全局变量的使用,以防止相互之前的冲突(“全局变量污染”),那么此时我们完全可以把自己这一部分内容封装到一个闭包中,让全局变量转换为私有变量

javascript
(function () {
  var n = 12;
  function fn() {}
  //...
})();
1
2
3
4
5

不仅如此,我们封装类库插件的时候,也会把自己的程序都存放到闭包中保护起来,防止和用户的程序冲突,但是我们又需要暴露一些方法给客户使用,这样我们如何处理呢?

JQ 这种方式

把需要暴露的方法抛到全局

javascript
(function () {
  function jQuery() {
    //...
  }
  //...
  window.jQuery = window.$ = jQuery; //=>把需要供外面使用的方法,通过给WIN设置属性的方式暴露出去
})();
// jQuery();
// $();
1
2
3
4
5
6
7
8
9

Zepto 这种方式

基于 RETURN 把需要共外面使用的方法暴露出去

javascript
var Zepto = (function () {
  //...
  return {
    xxx: function () {},
  };
})();
Zepto.xxx();
1
2
3
4
5
6
7

闭包具有“保存”作用

形成不销毁的栈内存,把一些值保存下来,方便后面的调取使用

沪ICP备20006251号-1