• 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() 毅然会该作用域引用,这个引用就叫做闭包
    闭包使得函数可以继续访问定义时的词法作用域

     

  • 相关阅读:
    dataTables的导出Excel功能
    jquery生成二维码图片
    angular2表单初体验
    台湾辅仁大学的python教程笔记
    浅说《测试用例》----给测试新手的
    测试员的工作与学习
    简单的表格代码
    特殊效果字体代码
    办公自动化的基本方法
    css网页的几种类型
  • 原文地址:https://www.cnblogs.com/jialikesensi/p/11523867.html
Copyright © 2020-2023  润新知