码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript闭包

时间:2015-04-14 07:04:12      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

/*
  JavaScript实现了自动释放内存的系统,当代码不再需要时,就从电脑的内存中把它移除。这些自动化系统叫做垃圾回收(garbage collector)。
  当函数执行完毕时,管理内存的本地方法会将函数中所有创建了的东西从内存中移除。毕竟函数已经执行完毕,所以似乎我们不再需要访问该执行环境中的任何东西了。
*/
/*
var prison = function () {
  var prisoner = ‘Josh Powell‘;
};

prison();
*/
/*
  一旦prison完成执行,我们就不需要访问prisoner变量,所以Josh自由啦。这种模式有点繁琐,所以我们把它转换为自执行匿名函数的模式。
*/
/*
(function () {
  var prisoner = ‘Josh Powell‘;
})();
*/
/*
  这是同一回事,函数执行完成时,prisoner变量就不再需要保存在内存中了。再见Josh!
  我们把这一段代码粘帖到模块模式中去。
*/

var prison = (function() {
  var prisoner = ‘Josh Powell‘;

  /* 将变量或者函数保存为对象上名字相同的属性,然后由模块模式返回该对象,我们对这一做法会非常熟悉:整本书都使用这种做法。
  */
  return { prisoner: prisoner };

})();
// outputs ‘Josh Powell‘
console.log( prison.prisoner );

/*
  我们仍然不需要在匿名函数执行后访问prisoner变量。因为字符串Josh Powell已经保存在prison.prisoner中,没有理由再在模块所在的内存中保存prisoner变量,因为它不能再被访问。
  prison.prisoner的值是字符串Josh Powell。 */ var prison = (function() { var prisoner = ‘Josh Powell‘; return { prisoner: function () { return prisoner; } } })(); // console.log( prison.prisoner() ); /* 现在我们终于可以回答“什么是闭包”这个问题了。闭包是阻止垃圾回收器将变量从内存中移除的方法,使得在创建变量的执行环境的外面能够访问到该变量。
  在prisoner函数被保存到prison对象上时,一个闭包就创建了。闭包因保存函数而被创建,闭包因保存函数而被创建,在执行环境的外面,可以动态的访问prisoner变量,
  这就阻止了垃圾回收器将prisoner变量从内存中移除。 */

   我们再多看几个闭包的示例。

 

JavaScript闭包

标签:

原文地址:http://www.cnblogs.com/nodejsxxh/p/4423800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!