闭包浅解析

Posted kenanyah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包浅解析相关的知识,希望对你有一定的参考价值。

资料来源:《你不知道的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。

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



以上是关于闭包浅解析的主要内容,如果未能解决你的问题,请参考以下文章

js ECMAscript原型,继承,this,bind,闭包,浅/深拷贝,正则表达式

Spark闭包与序列化

Swift之深入解析闭包Closures的使用和捕获变量的原理

iOS UIView 动画浅谈

JavaScript-变量的作用域闭包预解析

JavaScript 作用域(链)预解析闭包函数