标签:语言 将不 访问 删除 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)。
标签:语言 将不 访问 删除 bag OLE log class 外部
原文地址:https://www.cnblogs.com/yala-tor-taor/p/closure.html