码迷,mamicode.com
首页 > 其他好文 > 详细

函数式编程,闭包,作用域,全局变量

时间:2017-07-02 22:17:46      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:局部变量   count   func   ++   bsp   javascrip   产生   function   return   

 function generateClosure(){
  var count = 0;

  var get = function(){
   return ++count;
 }

  return get;
}

var counter = generateClosure();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

一个函数返回它内部定义的一个函数,就产生了一个闭包,闭包不仅包括被返回的函数 ,还包括这个函数的定义环境。上面例子中,generateClosure内部的函数get被外部的变量counter引用时,counter和generateClosure的局部变量就构成了一个闭包。

 
function generateClosure(){
  var count = 0;

  var get = function(){
   return ++count;
 }

  return get;
}

var counter1 = generateClosure();
var counter2 = generateClosure();
console.log(counter1()); // 1
console.log(counter2()); // 1
console.log(counter1()); // 2
console.log(counter1()); // 3
console.log(counter2()); // 2

上面例子generateClosure调用了两次,产生了两个独立的闭包实例,二者的定义环境不一样。可以这样理解,generateClosure返回get的时候,也将get能引用到的generateClosure的局部变量也返回了,并在内存中生成了一个副本。上面的例子即使把var换成let,值类型count换成对象count{value:0}必不会影响结果。

 

函数式编程,闭包,作用域,全局变量

标签:局部变量   count   func   ++   bsp   javascrip   产生   function   return   

原文地址:http://www.cnblogs.com/dirichlet/p/7106452.html

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