日期:2014-05-16  浏览次数:20296 次

也发个js的闭包,新手学习,请多指教

?

以下内容来自javascript高级程序设计一书,加上我的理解.

先说说变量的作用域和内存问题

每个函数在执行时都会创建自己的执行环境.当执行流进入一个函数是,函数的环境就会被推入一个环境栈中,而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境(也就是调用它的函数的执行环境).

定义一个概念:

变量对象:?每个执行环境都有一个与之关联的变量对象环境中定义的所有变量和函数都保存在这个对象中.

当代码在一个环境中执行时,会创建由变量对象构成的一个作用域链.?作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问.

?

来看一个普通函数:

?

function compare(value1,value2){
	if(value1 < value2){
	    return -1;
	}else if(value1 > value2){
	    return 1;
	}else{
	    return 0;
	}
}
var result = compare(5,10);

?

将其作用域链图画出来如下:

?

?

?