初步了解Javascript 闭包

这段时间在学习Javascript,在过程中记录下一些知识点,以便以后回顾和帮助一些初学的朋友,要是有大神能给提点建议就最好了。

初识闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。 —— [ 百度百科 ]

上面的这个定义来自百度百科,看完之后其实你还是不知道闭包是什么东西,那么下面来看一个实际的例子,可能更好理解。

function A(){
    function B(){
       console.log("Hello!");
    }
    return B;
}
var c = A();
c();//Hello!

这就是一个最简单的闭包,我们来分步读一下这个例子。
1,定义普通一个函数A。
2,在里面定义一个普通函数B。
3,函数A返回函数B。(在Javascript中函数也是对象,所以可以被当作返回值)
4,把函数A的执行结果赋值给变量c
5,执行c()

用一句话来归纳下,函数A的内部函数B被函数A外面的变量c引用,或者当一个内部函数被外部函数之外的变量引用了,这就是一个闭包。

闭包的作用

为了讲清楚闭包的作用,先说下为什么会形成闭包,之所以会形成闭包是因为Javascript中GC的机制是回收没有被引用的对象,而在上面的例子中,函数B属于函数A,函数B被变量c引用,就是说c间接的引用了函数A,所以A不会被回收,会一直存在于内存之中。下面我们通过改进一下上述例子来证实一下这个结论。

function A(){
    var count = 0;
    function B(){
       count ++;
       console.log(count);
    }
    return B;
}
var c = A();
c();// 1
c();// 2
c();// 3

每执行一次c(),输出的结果就会加1,说明变量count的值的生命周期被延长了,没有随着函数的执行完毕而消失,count是函数A的局部变量,那说明函数A一直是存在的,他没有消失。

这就是闭包的作用,它延长变量的生命周期,而且不会“污染”全局变量,所以在一些类似的计算或者缓存等场景都可以使用闭包来完成,但是使用闭包也需要谨慎,因为它不会释放内存,使用平凡可能会影响效率。

文章是在慕课网学习相关文章后整理而来,关于闭包的用法还有很多东西,之后学习了还会更新过来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值