zoukankan      html  css  js  c++  java
  • js闭包

    function foo() {
    var a = 2;
    function bar() {
    console.log( a );
    }
    return bar;
    }
    var baz = foo();
    baz(); // 2 —— 朋友, 这就是闭包的效果。
    函数bar()的词法作用域能够访问foo()的内部作用域,然后我们将bar()函数本身当做一个值类型进行传递,

    在这个例子中,我们将bar所引用的函数对象本身当做返回值.

    在foo()执行完成之后,其返回值(),也就是内部的bar()函数,复制给变量baz并调用baz(),世纪上只是通过不同的标识符引用调用了内部的函数bar().

    bar() 显然可以被正常执行.但是在这个例子中,它在自己定义的词法作用域之外的地方执行.

    在foo()执行完之后,通常会期待foo()的整个内部作用域被销毁,因为我们知道引擎,有垃圾回收器来释放不再使用的内存空间. 由于看上去foo()的内容不会再被使用,所以很自然地会考虑对齐进行垃圾回收.
    而闭包的神奇之处真在于此,他们阻止这件事情的发生.事实上内部作用域毅然存在,因此没有被回收,谁在使用这个内部作用域,原来是bar()本身.
    bar()涵盖foo()内部作用域的闭包,使得该作用域能够一直存活,以供bar()之后任何时间进行引用
    bar() 毅然会该作用域引用,这个引用就叫做闭包
    闭包使得函数可以继续访问定义时的词法作用域

     

  • 相关阅读:
    python 模拟(简易)音乐播放器
    Python中的多态如何理解?(转)
    mysql踩得坑
    python简单模拟博客园系统
    04 信号量
    02 事件
    01 管道
    32 管道 事件 信号量 进程池 线程的创建
    02 验证进程之间是空间隔离的
    01 进程的其他方法
  • 原文地址:https://www.cnblogs.com/jialikesensi/p/11523867.html
Copyright © 2011-2022 走看看