js系列十:闭包

概念
闭包是一种特殊的对象。
它由两部分组成:执行上下文(代号A),已经在该执行上下文中创建的函数(代码B)。
当B执行时,如果访问了A中变量对象中值,那么闭包就会产生。
我们只需要知道,一个闭包对象,由A,B共同组成,在以后的文章中,都会将以chrome的标准来称呼。

function foo() {
	var a = 20;
	var b = 30;
	function bar() {
		return a + b;
	}
	return bar;
}
var bar = foo();
bar();

在上面的例子中,首先执行上下文 foo,在foo中定义了函数bar,而后通过对外返回bar的方式让bar得以执行。当时执行时,访问了 foo 内部变量a和b。因此这个时候闭包产生,
在chrome中通过断点调试的方式可以逐步分析该过程,从图中可以看出,此时闭包产生,用foo代替
js系列十:闭包_第1张图片
js系列十:闭包_第2张图片
在图中,箭头所指的正是闭包,其中call stack 为当前的函数调用栈,scope 为当前正在被执行函数的作用域链,Local 为当前活动对象。
现在我们来思考一个小小的问题,把上面的代码调整成这样后,是否形成闭包?

function foo() {
	var a = 20;
	var b = 30;
	function bar() {
		return a + b;
	}
	bar();
}
foo()

你可能感兴趣的:(闭包,javascript入门到进阶)