码迷,mamicode.com
首页 > 其他好文 > 详细

闭包(closure)

时间:2018-04-26 11:57:34      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:语言   将不   访问   删除   bag   OLE   log   class   外部   

概念:函数内部创建的函数,可以访问该函数的作用域,这个内部函数叫做闭包,是函数内部和函数外部建立连接的桥梁。

例子:

function a() {
    var a = "hello"; // a函数内的局部变量
    
    function b() { // 函数内部的函数,函数b就是闭包
        console.log(a); // 通过b函数访问a函数内的局部变量a
    }
    
    return b; // 关键,返回b函数
}

运行:

a()(); // 结果是"hello"

分析:

  1.因为函数b在函数a的内部,所以函数a中所有的局部变量对于b函数都是可见的,这是由javascript语言特有的“链式作用域”结构(chain scope)特性决定的,子对象会一级一级地向上寻找所有父对象的变量,直到找到为止。通过由返回函数b达到访问函数a中的局部变量的效果。

  2.因为函数a是函数b的父函数,而函数b被赋给了一个全局变量,导致了函数b始终在内存中,而函数b的存在依赖于函数a,导致函数a也始终在内存中,不会在调用结束后被垃圾回收机制(garbage collection)回收。使用闭包会使得函数中的变量都被保存在内存中,内存消耗很大,滥用闭包可能会导致网页性能问题,解决方法是在退出函数前将不使用的局部变量全部删除(给变量赋值undefined)。

闭包(closure)

标签:语言   将不   访问   删除   bag   OLE   log   class   外部   

原文地址:https://www.cnblogs.com/yala-tor-taor/p/closure.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!