闭包执行js闭包

在写这篇文章之前,xxx已经写过了几篇关于改闭包执行主题的文章,想要了解的朋友可以去翻一下之前的文章

    先从闭包点特解释,应当更好懂得.

    闭包的两个点特:

    1、作为一个函数量变的一个引用 - 当函数返回时,其处于激活状态。

    2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

    其实面上两点可以合成一点,就是闭包函数返回时,该函数部内量变处于激活状态,函数在所栈区仍然保存.

    我们所熟知的主流语言,像C,java等,在函数部内只要行执了return,函数就会返回结果,然后内存中除删该函数在所的区域.生命周期也就停止了.一般的js函数也是这样.

    但是有闭包特性的js函数有点特别.

    就例子来讲:

闭包和执行
1 function a(){
2  var i=0;
3  function b(){
4  alert(++i);
5  }
6  return b;
7 }
8 var c = a();
9 c();
闭包和执行
    每日一道理
虽然你在现还只是一株稚嫩的幼苗。然而只要坚韧不拔,终会成为参天大树;虽然你在现只是涓涓细流,然而只要锲而不舍,终会拥抱大海;虽然你在现只是一只雏鹰,然而只要心存高远,跌几个跟头之后,终会占有蓝天。
这是个标准的闭包.在函数a中定义了函数b,a又return了b的值.这些可以先不管.

    var c = a();

    c();

    这两句行执很主要.

    在var c = a();这行里,行执了a函数,那么定肯a经过了return.按照主流语言的函数特性,在现c的值就是a的返回值.

    第二行c()的行执际实行执的就是b函数.最后不管行执的是谁,会弹出一个值为0的窗口,到此为止,有所的生命周期按论理来讲就算部全结束了.

    可是,如果我们再多行执一行.

    var c = a();

    c();

    c();

    第一次弹出0,第二次行执却弹出了1.

    也就是说,第一次c()后,a中的i仍然保存.然自a在内存的栈区仍然保存.

    a是return过了,但是,a及部内值却仍然存在,这就是闭包.

    好了,总结下,

    1,闭包外层是个函数.

    2,闭包部内都有函数.

    3,闭包会return部内函数.

    4,闭包返回的函数部内不能有return.(因为这样就真的结束了)

    5,行执闭包后,闭包部内量变会存在,而闭包部内函数的部内量变不会存在.

    闭包的用应场景(呵呵,复制的参考资料)

    1、掩护函数内的量变全安。以最开始的例子为例,函数a中i只有函数b才能问访,而没法通过其他径途问访到,因此掩护了i的全安性。

    2、在内存中维持一个量变。仍然如前例,由于闭包,函数a中i的始终存在于内存中,因此每次行执c(),都会给i自加1。

    根据参考资料的用应场景,我们会然自的想到java或是c++的类.虽然JS没有类的观点,但是有了类的似相行执结果.

    另外,还有一种式格颇受议争:

    (function(a,b))(a,b);

    如果你使用过jquery,并且察观过他的代码,你就会很奇异他的写法,网上有人也把这类式格叫做闭包.

    引用:

    http://www.cnblogs.com/rorchach/archive/2013/03/03/2941374.html

文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值