闭包(closure)是Javascript的特色,很多高级应用都要依靠闭包实现。
首先必须理解Javascript变量作用域。全局变量和局部变量。函数内部能够读取全局变量,但是在外部无法读取函数内部变量。而闭包就是解决外部得到函数内的局部变量。闭包的用途
1、读取函数内部的变量; 2、让函数内部的变量的值始终保持在内存中。在下面的代码中我将详细说明闭包的用法和我的一些理解
<!DOCTYPE html>
<html> <head> <title>javascript中关于函数内部变量的调用方法(闭包)</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <body> <script type="text/javascript"> function house(){ var num=1;//房子内人的个数; addNum=function(){ //预留的增加函数人数的方法; num+=1; } function query(){//这个函数就叫闭包 alert(num); return num;//返回这个房子的人数 } return query;//返回查询这个房子人数方法的指针及地址; } var res=house();//将这个房子的查询方法的指针/地址赋给变量res; res();//查询房子里面的人数 num=1; addNum();//增加房子内人的个数; res();//num=2 //--所谓闭包可以这样理解:我们可以将 function比喻成 var 那么house()就相当于一个全局变量 //num相当于house()这个全局变量的一个结构,addNum相当于一个改变house()这个全局变量部分结构的方法, //query()相当于house()中查询房子内部num结构的方法,因为house()相当于一个全局变量,那么它内部的 //所以house()的结构也就相当于是全局变量。所以通过addNum()改变num值时num的变化会被保存下来,下次 //再通过res这个指针访问house()时 num的值是已经改变后的。 </script> </body> </html>