再谈JS闭包

js中的闭包其实是对于局部作用域的保持,如果没有这个特性,便无法取到函数内局部作用域内的私有变量。函数内部以子函数引用父函数变量的形式返回一个所谓的闭包,既私装有来自私密空间的空气的一个包裹,带着这个包裹到哪里,你都可以打开小口,呼吸一下原汁原味的密闭空间里的空气。
其实在js的模块化中我们也经常用这种手段来处理。通过函数来创造一个不受打扰的私密空间,通过闭包来返回一个对外暴露的接口。如下:

(function(){

  var name = 'jalon';
  var age = 25;
  function getName() {
    return name;
  }
  function getAge() {
    return age;
  }

  return {
    getAge: getAge,
    getName: getName
  }

})();

注意避免循环引用,这样在ie9下的浏览器中会不予回收,内存泄露:

obj.prop2 = function(){
  console.log(obj.prop1)  ;
}

会造成obj无法回收

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容