Javascript的闭包工作原理

所谓的闭包:

        官方语言:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该         表达式的一部分。

我这边的理解是:其实在js中所有的function方法其实都可以算作是闭包,简单来说也可以理解为是嵌套function方法的使用:

如下面的代码例子:

function run(){
   var a=10;
    return function(){
	a++;
	console.log(a);
    }
}
var foo=run();
foo();//11
foo();//12 
foo();//13

解析:此时的foo的值就等于run()函数的返回值,foo函数就是一个闭包;

1)执行的流程是先调用foo()方法,foo()这个方法会找到run()方法里面的返回函数方法,这个返回函数方法会指向run()方法里面的a变量,然后再执行foo()时,会输出11;

2)在上面的例子中,由于闭包的存在使得函数run返回后,run()中的a始终存在,这样每次执行foo(),a都是自加1后console出a的值。

代码特点: 

1、返回函数嵌套在函数run内部; 

2、一个匿名函数代替来返回,即return function(){};

3、函数run返回函数里面的。代码中函数run的内部函数返回函数,被函数run外面的一个变量foo引用的时候,这就叫创建了一个闭包。

4、一般在应用时会将run里面的返回函数改成函数方法,来调用,而不是直接return;

优点: 
1.保护函数内的变量安全,加强了封装性 
2.在内存中维持一个变量(用的太多就变成了缺点,占内存) 
闭包之所以会占用资源是当函数run()执行结束后, 变量a不会因为函数run的结束而销毁, 因为run里面的返回函数的执行需要依赖run中的变量。


                









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值