闭包浅解析

资料来源:《你不知道的Javascript(上卷)》

function foo(){
    var a = 2;
    function bar(){
	console.log(a); 
    }
    return bar
}
var baz = foo();
baz(); // 2 这就是闭包效果 

在这个例子中,bar()在自己定义的词法作用域(foo函数内)以外的地方执行。
在foo()函数执行之后,按理说应该会被回收,但是由于闭包存在,bar()中拥有foo()内部作用域的变量a,导致foo()函数不会被销毁。
在baz被实际调用(调用内部函数bar()),可以访问变量a。

无论通过何种手段将内部函数传递到所在词法作用域以外,他都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。

原文地址:https://www.cnblogs.com/kenanyah/p/12988029.html