javascript闭包

在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!

1、什么是闭包
官方的回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

 

function funcTest()
 {
   var tmpNum=100; //私有变量
 
  //在函数funcTest内定义另外的函数作为funcTest的方法函数
   function innerFuncTest(
   {
        alert(tmpNum); //引用外层函数funcTest的临时变量tmpNum
   }
 
  return innerFuncTest; //返回内部函数(不要纠结于这种写法,只是为了说明闭包) 
}
//调用函数 var myFuncTest=funcTest(); myFuncTest();//弹出100

  上面代码中,注释已经写的清清楚楚。现在我们可以这么理解“闭包”:在函数体内定义另外的函数作为目标对象的方法函数(示例中就是在函数funcTest内定义另外的函数innerFuncTest作为funcTest的方法函数),而这个对象的方法函数反过来引用外层函数体中的临时变量(闭包是一种间接保持变量值的机制。示例中就是内部函数innerFuncTest引用外层函数funcTest的临时变量tmpNum,这里必须注意,临时变量可以包括外部函数中声明的所有局部变量参数和声明的其他内部函数)。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包(示例中,调用函数的时候,myFuncTest实际调用的是innerFuncTest函数,也就是说funcTest的一个内部函数innerFuncTest在funcTest之外被调用,这时就创建了一个闭包)。

作者:Jeff Wong
出处:http://jeffwongishandsome.cnblogs.com/

 

posted on 2014-04-08 11:06  飞鸟快跑  阅读(212)  评论(0编辑  收藏  举报